Current section
Files
Jump to
Current section
Files
src/atproto_openapi@paths.erl
-module(atproto_openapi@paths).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/atproto_openapi/paths.gleam").
-export([path_for/1, query_path_item/2, procedure_path_item/2]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(false).
-file("src/atproto_openapi/paths.gleam", 28).
?DOC(false).
-spec 'maybe'(
binary(),
gleam@option:option(ISK),
fun((ISK) -> gleam@json:json())
) -> list({binary(), gleam@json:json()}).
'maybe'(Key, Value, To_json) ->
case Value of
{some, V} ->
[{Key, To_json(V)}];
none ->
[]
end.
-file("src/atproto_openapi/paths.gleam", 39).
?DOC(false).
-spec non_empty_json(binary(), list(gleam@json:json())) -> list({binary(),
gleam@json:json()}).
non_empty_json(Key, Values) ->
case Values of
[] ->
[];
_ ->
[{Key, gleam@json:preprocessed_array(Values)}]
end.
-file("src/atproto_openapi/paths.gleam", 49).
?DOC(false).
-spec path_for(binary()) -> binary().
path_for(Nsid) ->
<<"/xrpc/"/utf8, Nsid/binary>>.
-file("src/atproto_openapi/paths.gleam", 267).
?DOC(false).
-spec error_envelope_schema(list(atproto_lexicon@ast:lexicon_error())) -> gleam@json:json().
error_envelope_schema(Errors) ->
Names = gleam@list:map(Errors, fun(E) -> erlang:element(2, E) end),
gleam@json:object(
[{<<"type"/utf8>>, gleam@json:string(<<"object"/utf8>>)},
{<<"properties"/utf8>>,
gleam@json:object(
[{<<"error"/utf8>>,
gleam@json:object(
[{<<"type"/utf8>>,
gleam@json:string(<<"string"/utf8>>)},
{<<"enum"/utf8>>,
gleam@json:array(
Names,
fun gleam@json:string/1
)}]
)},
{<<"message"/utf8>>,
gleam@json:object(
[{<<"type"/utf8>>,
gleam@json:string(<<"string"/utf8>>)}]
)}]
)}]
).
-file("src/atproto_openapi/paths.gleam", 256).
?DOC(false).
-spec errors_description(list(atproto_lexicon@ast:lexicon_error())) -> binary().
errors_description(Errors) ->
_pipe = Errors,
_pipe@1 = gleam@list:map(_pipe, fun(E) -> case erlang:element(3, E) of
{some, D} ->
<<<<(erlang:element(2, E))/binary, ": "/utf8>>/binary,
D/binary>>;
none ->
erlang:element(2, E)
end end),
gleam@string:join(_pipe@1, <<"\n"/utf8>>).
-file("src/atproto_openapi/paths.gleam", 235).
?DOC(false).
-spec error_response_json(list(atproto_lexicon@ast:lexicon_error())) -> gleam@option:option(gleam@json:json()).
error_response_json(Errors) ->
case Errors of
[] ->
none;
_ ->
{some,
gleam@json:object(
[{<<"description"/utf8>>,
gleam@json:string(errors_description(Errors))},
{<<"content"/utf8>>,
gleam@json:object(
[{<<"application/json"/utf8>>,
gleam@json:object(
[{<<"schema"/utf8>>,
error_envelope_schema(
Errors
)}]
)}]
)}]
)}
end.
-file("src/atproto_openapi/paths.gleam", 184).
?DOC(false).
-spec binary_schema() -> gleam@json:json().
binary_schema() ->
gleam@json:object(
[{<<"type"/utf8>>, gleam@json:string(<<"string"/utf8>>)},
{<<"format"/utf8>>, gleam@json:string(<<"binary"/utf8>>)}]
).
-file("src/atproto_openapi/paths.gleam", 176).
?DOC(false).
-spec body_content_json(atproto_lexicon@ast:body(), binary()) -> {ok,
gleam@json:json()} |
{error, atproto_openapi@refs:ref_error()}.
body_content_json(Body, Doc_id) ->
gleam@result:'try'(case erlang:element(4, Body) of
{some, Bs} ->
atproto_openapi@schema:body_schema(Bs, Doc_id);
none ->
{ok, binary_schema()}
end, fun(Body_schema) ->
{ok,
gleam@json:object(
[{erlang:element(3, Body),
gleam@json:object(
[{<<"schema"/utf8>>, Body_schema}]
)}]
)}
end).
-file("src/atproto_openapi/paths.gleam", 213).
?DOC(false).
-spec ok_response_json(
gleam@option:option(atproto_lexicon@ast:body()),
binary()
) -> {ok, gleam@json:json()} | {error, atproto_openapi@refs:ref_error()}.
ok_response_json(Output, Doc_id) ->
case Output of
none ->
{ok,
gleam@json:object(
[{<<"description"/utf8>>, gleam@json:string(<<"OK"/utf8>>)}]
)};
{some, Body} ->
gleam@result:'try'(
body_content_json(Body, Doc_id),
fun(Content) ->
Description = case erlang:element(2, Body) of
{some, D} ->
D;
none ->
<<"OK"/utf8>>
end,
{ok,
gleam@json:object(
[{<<"description"/utf8>>,
gleam@json:string(Description)},
{<<"content"/utf8>>, Content}]
)}
end
)
end.
-file("src/atproto_openapi/paths.gleam", 193).
?DOC(false).
-spec responses_json(
gleam@option:option(atproto_lexicon@ast:body()),
list(atproto_lexicon@ast:lexicon_error()),
binary()
) -> {ok, gleam@json:json()} | {error, atproto_openapi@refs:ref_error()}.
responses_json(Output, Errors, Doc_id) ->
gleam@result:'try'(
ok_response_json(Output, Doc_id),
fun(Ok_response) ->
Error_response = error_response_json(Errors),
{ok,
gleam@json:object(
lists:append(
[[{<<"200"/utf8>>, Ok_response}], case Error_response of
{some, E} ->
[{<<"400"/utf8>>, E}];
none ->
[]
end]
)
)}
end
).
-file("src/atproto_openapi/paths.gleam", 122).
?DOC(false).
-spec parameter_json(
binary(),
atproto_lexicon@ast:params_property_type(),
boolean(),
binary()
) -> {ok, gleam@json:json()} | {error, atproto_openapi@refs:ref_error()}.
parameter_json(Name, Pt, Required, Doc_id) ->
gleam@result:'try'(
atproto_openapi@schema:params_property_type(Pt, Doc_id),
fun(Param_schema) ->
Style_fields = case Pt of
{params_array, _, _, _, _} ->
[{<<"style"/utf8>>, gleam@json:string(<<"form"/utf8>>)},
{<<"explode"/utf8>>, gleam@json:bool(true)}];
_ ->
[]
end,
{ok,
gleam@json:object(
lists:append(
[[{<<"name"/utf8>>, gleam@json:string(Name)},
{<<"in"/utf8>>,
gleam@json:string(<<"query"/utf8>>)},
{<<"required"/utf8>>, gleam@json:bool(Required)}],
Style_fields,
[{<<"schema"/utf8>>, Param_schema}]]
)
)}
end
).
-file("src/atproto_openapi/paths.gleam", 107).
?DOC(false).
-spec parameters_json(
gleam@option:option(atproto_lexicon@ast:params_schema()),
binary()
) -> {ok, list(gleam@json:json())} | {error, atproto_openapi@refs:ref_error()}.
parameters_json(Params, Doc_id) ->
case Params of
none ->
{ok, []};
{some, P} ->
gleam@list:try_map(
erlang:element(4, P),
fun(Entry) ->
{Name, Pt} = Entry,
Required = gleam@list:contains(erlang:element(3, P), Name),
parameter_json(Name, Pt, Required, Doc_id)
end
)
end.
-file("src/atproto_openapi/paths.gleam", 70).
?DOC(false).
-spec query_operation(binary(), atproto_lexicon@ast:query_def()) -> {ok,
gleam@json:json()} |
{error, atproto_openapi@refs:ref_error()}.
query_operation(Nsid, Q) ->
gleam@result:'try'(
parameters_json(erlang:element(3, Q), Nsid),
fun(Parameters) ->
gleam@result:'try'(
responses_json(erlang:element(4, Q), erlang:element(5, Q), Nsid),
fun(Responses) ->
{ok,
gleam@json:object(
lists:append(
[[{<<"operationId"/utf8>>,
gleam@json:string(Nsid)}],
'maybe'(
<<"description"/utf8>>,
erlang:element(2, Q),
fun gleam@json:string/1
),
non_empty_json(
<<"parameters"/utf8>>,
Parameters
),
[{<<"responses"/utf8>>, Responses}]]
)
)}
end
)
end
).
-file("src/atproto_openapi/paths.gleam", 54).
?DOC(false).
-spec query_path_item(binary(), atproto_lexicon@ast:query_def()) -> {ok,
gleam@json:json()} |
{error, atproto_openapi@refs:ref_error()}.
query_path_item(Nsid, Q) ->
gleam@result:'try'(
query_operation(Nsid, Q),
fun(Operation) ->
{ok, gleam@json:object([{<<"get"/utf8>>, Operation}])}
end
).
-file("src/atproto_openapi/paths.gleam", 153).
?DOC(false).
-spec request_body_json(
gleam@option:option(atproto_lexicon@ast:body()),
binary()
) -> {ok, gleam@option:option(gleam@json:json())} |
{error, atproto_openapi@refs:ref_error()}.
request_body_json(Input, Doc_id) ->
case Input of
none ->
{ok, none};
{some, Body} ->
gleam@result:'try'(
body_content_json(Body, Doc_id),
fun(Content) ->
{ok,
{some,
gleam@json:object(
lists:append(
[[{<<"required"/utf8>>,
gleam@json:bool(true)}],
'maybe'(
<<"description"/utf8>>,
erlang:element(2, Body),
fun gleam@json:string/1
),
[{<<"content"/utf8>>, Content}]]
)
)}}
end
)
end.
-file("src/atproto_openapi/paths.gleam", 85).
?DOC(false).
-spec procedure_operation(binary(), atproto_lexicon@ast:procedure_def()) -> {ok,
gleam@json:json()} |
{error, atproto_openapi@refs:ref_error()}.
procedure_operation(Nsid, P) ->
gleam@result:'try'(
parameters_json(erlang:element(3, P), Nsid),
fun(Parameters) ->
gleam@result:'try'(
request_body_json(erlang:element(4, P), Nsid),
fun(Request_body) ->
gleam@result:'try'(
responses_json(
erlang:element(5, P),
erlang:element(6, P),
Nsid
),
fun(Responses) ->
{ok,
gleam@json:object(
lists:append(
[[{<<"operationId"/utf8>>,
gleam@json:string(Nsid)}],
'maybe'(
<<"description"/utf8>>,
erlang:element(2, P),
fun gleam@json:string/1
),
non_empty_json(
<<"parameters"/utf8>>,
Parameters
),
'maybe'(
<<"requestBody"/utf8>>,
Request_body,
fun(Body) -> Body end
),
[{<<"responses"/utf8>>, Responses}]]
)
)}
end
)
end
)
end
).
-file("src/atproto_openapi/paths.gleam", 60).
?DOC(false).
-spec procedure_path_item(binary(), atproto_lexicon@ast:procedure_def()) -> {ok,
gleam@json:json()} |
{error, atproto_openapi@refs:ref_error()}.
procedure_path_item(Nsid, P) ->
gleam@result:'try'(
procedure_operation(Nsid, P),
fun(Operation) ->
{ok, gleam@json:object([{<<"post"/utf8>>, Operation}])}
end
).