Skip to main content

src/d1_gleamflare.erl

-module(d1_gleamflare).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/d1_gleamflare.gleam").
-export([new/2, database/3, database_info_decoder/0, list_databases/1, create_database/2, get_database/2]).

-file("src/d1_gleamflare.gleam", 8).
-spec new(binary(), binary()) -> d1_gleamflare@types:client().
new(Account_id, Api_token) ->
    {client, Account_id, Api_token}.

-file("src/d1_gleamflare.gleam", 12).
-spec database(d1_gleamflare@types:client(), binary(), binary()) -> d1_gleamflare@types:database().
database(Client, Uuid, Name) ->
    {database, Client, Uuid, Name}.

-file("src/d1_gleamflare.gleam", 16).
-spec database_info_decoder() -> fun((gleam@dynamic:dynamic_()) -> {ok,
        d1_gleamflare@types:database_info()} |
    {error, list(gleam@dynamic:decode_error())}).
database_info_decoder() ->
    gleam@dynamic:decode4(
        fun(Field@0, Field@1, Field@2, Field@3) -> {database_info, Field@0, Field@1, Field@2, Field@3} end,
        gleam@dynamic:field(<<"uuid"/utf8>>, fun gleam@dynamic:string/1),
        gleam@dynamic:field(<<"name"/utf8>>, fun gleam@dynamic:string/1),
        gleam@dynamic:field(<<"created_at"/utf8>>, fun gleam@dynamic:string/1),
        gleam@dynamic:field(<<"version"/utf8>>, fun gleam@dynamic:string/1)
    ).

-file("src/d1_gleamflare.gleam", 26).
-spec list_databases(d1_gleamflare@types:client()) -> {ok,
        list(d1_gleamflare@types:database_info())} |
    {error, d1_gleamflare@types:error()}.
list_databases(Client) ->
    Req = begin
        _pipe = d1_gleamflare@internal:base_request(Client),
        _pipe@1 = gleam@http@request:set_method(_pipe, get),
        gleam@http@request:set_path(
            _pipe@1,
            <<<<"/client/v4/accounts/"/utf8,
                    (erlang:element(2, Client))/binary>>/binary,
                "/d1/database"/utf8>>
        )
    end,
    d1_gleamflare@internal:send_request(
        Req,
        gleam@dynamic:list(database_info_decoder())
    ).

-file("src/d1_gleamflare.gleam", 35).
-spec create_database(d1_gleamflare@types:client(), binary()) -> {ok,
        d1_gleamflare@types:database_info()} |
    {error, d1_gleamflare@types:error()}.
create_database(Client, Name) ->
    Body = begin
        _pipe = gleam@json:object([{<<"name"/utf8>>, gleam@json:string(Name)}]),
        gleam@json:to_string(_pipe)
    end,
    Req = begin
        _pipe@1 = d1_gleamflare@internal:base_request(Client),
        _pipe@2 = gleam@http@request:set_method(_pipe@1, post),
        _pipe@3 = gleam@http@request:set_path(
            _pipe@2,
            <<<<"/client/v4/accounts/"/utf8,
                    (erlang:element(2, Client))/binary>>/binary,
                "/d1/database"/utf8>>
        ),
        gleam@http@request:set_body(_pipe@3, Body)
    end,
    d1_gleamflare@internal:send_request(Req, database_info_decoder()).

-file("src/d1_gleamflare.gleam", 49).
-spec get_database(d1_gleamflare@types:client(), binary()) -> {ok,
        d1_gleamflare@types:database_info()} |
    {error, d1_gleamflare@types:error()}.
get_database(Client, Uuid) ->
    Req = begin
        _pipe = d1_gleamflare@internal:base_request(Client),
        _pipe@1 = gleam@http@request:set_method(_pipe, get),
        gleam@http@request:set_path(
            _pipe@1,
            <<<<<<"/client/v4/accounts/"/utf8,
                        (erlang:element(2, Client))/binary>>/binary,
                    "/d1/database/"/utf8>>/binary,
                Uuid/binary>>
        )
    end,
    d1_gleamflare@internal:send_request(Req, database_info_decoder()).