Packages

Star feeds is a gleam package for json feed generator

Current section

Files

Jump to
starfeeds src starfeeds@types.erl
Raw

src/starfeeds@types.erl

-module(starfeeds@types).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-define(FILEPATH, "src/starfeeds/types.gleam").
-export([enclosure_to_json/1, author_to_json/1, photo_to_json/1, video_to_json/1, extensionobject_to_json/1]).
-export_type([item/0, enclosure/0, author/0, category/0, link/0, feed_options/0, photo/0, video/0, extension_objects/0, extension/0, feed/0]).
-type item() :: {item,
binary(),
gleam@option:option(binary()),
binary(),
birl:time(),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(list(category())),
gleam@option:option({binary(), gleam@option:option(boolean())}),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(enclosure()),
gleam@option:option(list(author())),
gleam@option:option(list(author())),
gleam@option:option(birl:time()),
gleam@option:option(binary()),
list(gleam@option:option(extension()))}.
-type enclosure() :: {enclosure,
binary(),
gleam@option:option(binary()),
gleam@option:option(integer()),
gleam@option:option(binary()),
gleam@option:option(integer())}.
-type author() :: {author,
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary())}.
-type category() :: {category,
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary())}.
-type link() :: {link, binary(), binary(), binary(), binary()}.
-type feed_options() :: {feed_options,
binary(),
binary(),
gleam@option:option(birl:time()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(integer()),
gleam@option:option(binary()),
gleam@option:option(link()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(boolean()),
gleam@option:option(binary()),
gleam@option:option(author()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary())}.
-type photo() :: {photo, integer(), binary(), binary()}.
-type video() :: {video, integer(), binary(), integer()}.
-type extension_objects() :: {photos, list(photo())} |
{videos, list(video())} |
{unknown_objects, gleam@dynamic:dynamic_()}.
-type extension() :: {extension, binary(), extension_objects()}.
-type feed() :: {feed,
feed_options(),
list(item()),
list(binary()),
list(author()),
list(extension())}.
-file("src/starfeeds/types.gleam", 40).
-spec enclosure_to_json(enclosure()) -> gleam@json:json().
enclosure_to_json(Enclosure) ->
{enclosure, Url, Enc_type, Length, Title, Duration} = Enclosure,
gleam@json:object(
[{<<"url"/utf8>>, gleam@json:string(Url)},
{<<"enc_type"/utf8>>, case Enc_type of
none ->
gleam@json:null();
{some, Value} ->
gleam@json:string(Value)
end},
{<<"length"/utf8>>, case Length of
none ->
gleam@json:null();
{some, Value@1} ->
gleam@json:int(Value@1)
end},
{<<"title"/utf8>>, case Title of
none ->
gleam@json:null();
{some, Value@2} ->
gleam@json:string(Value@2)
end},
{<<"duration"/utf8>>, case Duration of
none ->
gleam@json:null();
{some, Value@3} ->
gleam@json:int(Value@3)
end}]
).
-file("src/starfeeds/types.gleam", 72).
-spec author_to_json(author()) -> gleam@json:json().
author_to_json(Author) ->
{author, Name, Email, Url, Avatar} = Author,
gleam@json:object([{<<"name"/utf8>>, case Name of
none ->
gleam@json:null();
{some, Value} ->
gleam@json:string(Value)
end}, {<<"email"/utf8>>, case Email of
none ->
gleam@json:null();
{some, Value@1} ->
gleam@json:string(Value@1)
end}, {<<"url"/utf8>>, case Url of
none ->
gleam@json:null();
{some, Value@2} ->
gleam@json:string(Value@2)
end}, {<<"avatar"/utf8>>, case Avatar of
none ->
gleam@json:null();
{some, Value@3} ->
gleam@json:string(Value@3)
end}]).
-file("src/starfeeds/types.gleam", 134).
-spec photo_to_json(photo()) -> gleam@json:json().
photo_to_json(Photo) ->
{photo, Id, Url, Caption} = Photo,
gleam@json:object(
[{<<"id"/utf8>>, gleam@json:int(Id)},
{<<"url"/utf8>>, gleam@json:string(Url)},
{<<"caption"/utf8>>, gleam@json:string(Caption)}]
).
-file("src/starfeeds/types.gleam", 147).
-spec video_to_json(video()) -> gleam@json:json().
video_to_json(Video) ->
{video, Id, Title, Duration_seconds} = Video,
gleam@json:object(
[{<<"id"/utf8>>, gleam@json:int(Id)},
{<<"title"/utf8>>, gleam@json:string(Title)},
{<<"duration_seconds"/utf8>>, gleam@json:int(Duration_seconds)}]
).
-file("src/starfeeds/types.gleam", 156).
-spec extensionobject_to_json(gleam@dict:dict(binary(), extension_objects())) -> gleam@json:json().
extensionobject_to_json(Object) ->
_pipe = Object,
_pipe@1 = maps:to_list(_pipe),
_pipe@2 = gleam@list:map(
_pipe@1,
fun(Kv) ->
{Key, Value} = Kv,
Out = case Value of
{photos, Photo_list} ->
gleam@json:array(Photo_list, fun photo_to_json/1);
{videos, Video_list} ->
gleam@json:array(Video_list, fun video_to_json/1);
{unknown_objects, _} ->
Unknown_list = [gleam@json:object(
[{<<"any"/utf8>>, gleam@json:null()}]
)],
gleam@json:array(Unknown_list, fun(J) -> J end)
end,
{Key, Out}
end
),
gleam@json:object(_pipe@2).