Skip to main content

src/gdav@delete_contact.erl

-module(gdav@delete_contact).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/gdav/delete_contact.gleam").
-export([request/2, with_etag/2, build/2, response/1]).
-export_type([request_builder/0]).

-type request_builder() :: {request_builder,
        binary(),
        binary(),
        gleam@option:option(binary())}.

-file("src/gdav/delete_contact.gleam", 16).
-spec request(binary(), binary()) -> request_builder().
request(Collection_path, Filename) ->
    {request_builder, Collection_path, Filename, none}.

-file("src/gdav/delete_contact.gleam", 20).
-spec with_etag(request_builder(), binary()) -> request_builder().
with_etag(Builder, Etag) ->
    {request_builder,
        erlang:element(2, Builder),
        erlang:element(3, Builder),
        {some, Etag}}.

-file("src/gdav/delete_contact.gleam", 24).
-spec build(request_builder(), gdav:credentials()) -> gleam@http@request:request(binary()).
build(Builder, Credentials) ->
    Headers = case erlang:element(4, Builder) of
        {some, Etag} ->
            [{<<"If-Match"/utf8>>, Etag}];

        none ->
            []
    end,
    gdav@internal:request(
        Credentials,
        delete,
        <<<<(erlang:element(2, Builder))/binary, "/"/utf8>>/binary,
            (erlang:element(3, Builder))/binary>>,
        Headers,
        <<""/utf8>>
    ).

-file("src/gdav/delete_contact.gleam", 42).
-spec response(gleam@http@response:response(binary())) -> {ok, nil} |
    {error, gdav:dav_error()}.
response(Res) ->
    case erlang:element(2, Res) of
        S when (S >= 200) andalso (S < 300) ->
            {ok, nil};

        404 ->
            {error, not_found};

        401 ->
            {error, authentication_failed};

        403 ->
            {error, authentication_failed};

        _ ->
            {error, {unexpected_response, Res}}
    end.