Current section
Files
Jump to
Current section
Files
src/starfeeds@feed.erl
-module(starfeeds@feed).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-define(FILEPATH, "src/starfeeds/feed.gleam").
-export([enclosure_to_json/1, author_to_json/1, photo_to_json/1, video_to_json/1, extensionobject_to_json/1, new_feed/1, add_item/2, add_category/2, add_contributor/2, add_extension/2, link/0, extension/0, enclosure/0, author/0, render_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, json_feed/0, json_item/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())}.
-type json_feed() :: {json_feed,
binary(),
binary(),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
list(author()),
gleam@option:option(binary()),
gleam@option:option(boolean()),
list(json_item()),
gleam@dict:dict(binary(), extension_objects())}.
-type json_item() :: {json_item,
binary(),
gleam@option:option(binary()),
binary(),
birl:time(),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(enclosure()),
gleam@option:option(author()),
list(binary()),
binary(),
binary(),
gleam@option:option(binary()),
list(gleam@dict:dict(binary(), extension_objects()))}.
-file("src/starfeeds/feed.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/feed.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/feed.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/feed.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/feed.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).
-file("src/starfeeds/feed.gleam", 194).
-spec new_feed(feed_options()) -> feed().
new_feed(Options) ->
{feed,
Options,
gleam@list:new(),
gleam@list:new(),
gleam@list:new(),
gleam@list:new()}.
-file("src/starfeeds/feed.gleam", 204).
-spec add_item(feed(), item()) -> list(item()).
add_item(Feed, Item) ->
_pipe = erlang:element(3, Feed),
lists:append(_pipe, [Item]).
-file("src/starfeeds/feed.gleam", 209).
-spec add_category(feed(), binary()) -> list(binary()).
add_category(Feed, Category) ->
_pipe = erlang:element(4, Feed),
lists:append(_pipe, [Category]).
-file("src/starfeeds/feed.gleam", 214).
-spec add_contributor(feed(), author()) -> list(author()).
add_contributor(Feed, Contributor) ->
_pipe = erlang:element(5, Feed),
lists:append(_pipe, [Contributor]).
-file("src/starfeeds/feed.gleam", 219).
-spec add_extension(feed(), extension()) -> list(extension()).
add_extension(Feed, Extenstion) ->
_pipe = erlang:element(6, Feed),
lists:append(_pipe, [Extenstion]).
-file("src/starfeeds/feed.gleam", 224).
-spec link() -> link().
link() ->
{link, <<""/utf8>>, <<""/utf8>>, <<""/utf8>>, <<""/utf8>>}.
-file("src/starfeeds/feed.gleam", 228).
-spec extension() -> extension().
extension() ->
{extension, <<""/utf8>>, {photos, []}}.
-file("src/starfeeds/feed.gleam", 232).
-spec enclosure() -> enclosure().
enclosure() ->
{enclosure, <<""/utf8>>, none, none, none, none}.
-file("src/starfeeds/feed.gleam", 242).
-spec author() -> author().
author() ->
{author, none, none, none, none}.
-file("src/starfeeds/feed.gleam", 352).
-spec json_item_to_json(json_item()) -> gleam@json:json().
json_item_to_json(Json_item) ->
{json_item,
Title,
Id,
Url,
Date,
Summary,
Content_html,
Category,
Image,
Enclosure,
Author,
Tags,
Date_published,
Date_modified,
Copyright,
Extensions} = Json_item,
gleam@json:object(
[{<<"title"/utf8>>, gleam@json:string(Title)},
{<<"id"/utf8>>, case Id of
none ->
gleam@json:null();
{some, Value} ->
gleam@json:string(Value)
end},
{<<"url"/utf8>>, gleam@json:string(Url)},
{<<"date"/utf8>>,
gleam@json:string(
begin
_pipe = Date,
birl:to_iso8601(_pipe)
end
)},
{<<"summary"/utf8>>, case Summary of
none ->
gleam@json:null();
{some, Value@1} ->
gleam@json:string(Value@1)
end},
{<<"content_html"/utf8>>, case Content_html of
none ->
gleam@json:null();
{some, Value@2} ->
gleam@json:string(Value@2)
end},
{<<"category"/utf8>>, case Category of
none ->
gleam@json:null();
{some, Value@3} ->
gleam@json:string(Value@3)
end},
{<<"image"/utf8>>, case Image of
none ->
gleam@json:null();
{some, Value@4} ->
gleam@json:string(Value@4)
end},
{<<"enclosure"/utf8>>, case Enclosure of
none ->
gleam@json:null();
{some, Value@5} ->
enclosure_to_json(Value@5)
end},
{<<"author"/utf8>>, case Author of
none ->
gleam@json:null();
{some, Value@6} ->
author_to_json(Value@6)
end},
{<<"tags"/utf8>>, gleam@json:array(Tags, fun gleam@json:string/1)},
{<<"date_published"/utf8>>, gleam@json:string(Date_published)},
{<<"date_modified"/utf8>>, gleam@json:string(Date_modified)},
{<<"copyright"/utf8>>, case Copyright of
none ->
gleam@json:null();
{some, Value@7} ->
gleam@json:string(Value@7)
end},
{<<"extensions"/utf8>>,
gleam@json:array(Extensions, fun extensionobject_to_json/1)}]
).
-file("src/starfeeds/feed.gleam", 270).
-spec json_feed_to_json(json_feed()) -> gleam@json:json().
json_feed_to_json(Json_feed) ->
{json_feed,
Version,
Title,
Home_page_url,
Feed_url,
Description,
User_comment,
Next_url,
Icon,
Favicon,
Authors,
Language,
Expired,
Items,
Extensions} = Json_feed,
gleam@json:object(
[{<<"version"/utf8>>, gleam@json:string(Version)},
{<<"title"/utf8>>, gleam@json:string(Title)},
{<<"home_page_url"/utf8>>, case Home_page_url of
none ->
gleam@json:null();
{some, Value} ->
gleam@json:string(Value)
end},
{<<"feed_url"/utf8>>, case Feed_url of
none ->
gleam@json:null();
{some, Value@1} ->
gleam@json:string(Value@1)
end},
{<<"description"/utf8>>, case Description of
none ->
gleam@json:null();
{some, Value@2} ->
gleam@json:string(Value@2)
end},
{<<"user_comment"/utf8>>, case User_comment of
none ->
gleam@json:null();
{some, Value@3} ->
gleam@json:string(Value@3)
end},
{<<"next_url"/utf8>>, case Next_url of
none ->
gleam@json:null();
{some, Value@4} ->
gleam@json:string(Value@4)
end},
{<<"icon"/utf8>>, case Icon of
none ->
gleam@json:null();
{some, Value@5} ->
gleam@json:string(Value@5)
end},
{<<"favicon"/utf8>>, case Favicon of
none ->
gleam@json:null();
{some, Value@6} ->
gleam@json:string(Value@6)
end},
{<<"authors"/utf8>>,
gleam@json:array(Authors, fun author_to_json/1)},
{<<"language"/utf8>>, case Language of
none ->
gleam@json:null();
{some, Value@7} ->
gleam@json:string(Value@7)
end},
{<<"expired"/utf8>>, case Expired of
none ->
gleam@json:null();
{some, Value@8} ->
gleam@json:bool(Value@8)
end},
{<<"items"/utf8>>, gleam@json:array(Items, fun json_item_to_json/1)},
{<<"extensions"/utf8>>, extensionobject_to_json(Extensions)}]
).
-file("src/starfeeds/feed.gleam", 413).
-spec new(feed_options()) -> json_feed().
new(Options) ->
{json_feed,
<<"https://jsonfeed.org/version/1.1"/utf8>>,
erlang:element(3, Options),
erlang:element(15, Options),
none,
none,
none,
none,
none,
none,
[],
none,
none,
[],
maps:new()}.
-file("src/starfeeds/feed.gleam", 432).
-spec feed_item() -> json_item().
feed_item() ->
{json_item,
<<""/utf8>>,
none,
<<""/utf8>>,
birl:now(),
none,
none,
none,
none,
none,
none,
[],
<<""/utf8>>,
<<""/utf8>>,
none,
[]}.
-file("src/starfeeds/feed.gleam", 452).
-spec render_json(feed()) -> gleam@json:json().
render_json(Ins) ->
Base_feed = new(erlang:element(2, Ins)),
Feed_with_options = case erlang:element(2, Ins) of
{feed_options,
_,
_,
_,
_,
_,
_,
_,
{some, Links},
_,
_,
_,
_,
_,
_,
_,
_,
_,
_} ->
case erlang:element(4, Links) of
<<"Json"/utf8>> ->
_record = Base_feed,
{json_feed,
erlang:element(2, _record),
erlang:element(3, _record),
erlang:element(4, _record),
{some, erlang:element(2, Links)},
erlang:element(6, _record),
erlang:element(7, _record),
erlang:element(8, _record),
erlang:element(9, _record),
erlang:element(10, _record),
erlang:element(11, _record),
erlang:element(12, _record),
erlang:element(13, _record),
erlang:element(14, _record),
erlang:element(15, _record)};
<<"json"/utf8>> ->
_record = Base_feed,
{json_feed,
erlang:element(2, _record),
erlang:element(3, _record),
erlang:element(4, _record),
{some, erlang:element(2, Links)},
erlang:element(6, _record),
erlang:element(7, _record),
erlang:element(8, _record),
erlang:element(9, _record),
erlang:element(10, _record),
erlang:element(11, _record),
erlang:element(12, _record),
erlang:element(13, _record),
erlang:element(14, _record),
erlang:element(15, _record)};
_ ->
Base_feed
end;
_ ->
Base_feed
end,
Authors = case erlang:element(14, erlang:element(2, Ins)) of
{some, Author} ->
[Author];
none ->
[]
end,
Feed_with_rem_opts = begin
_record@1 = Feed_with_options,
{json_feed,
erlang:element(2, _record@1),
erlang:element(3, _record@1),
erlang:element(15, erlang:element(2, Ins)),
erlang:element(5, _record@1),
erlang:element(16, erlang:element(2, Ins)),
erlang:element(7, _record@1),
erlang:element(8, _record@1),
erlang:element(17, erlang:element(2, Ins)),
erlang:element(10, _record@1),
Authors,
erlang:element(6, erlang:element(2, Ins)),
erlang:element(13, _record@1),
erlang:element(14, _record@1),
erlang:element(15, _record@1)}
end,
Feed_with_extensions = begin
_record@2 = Feed_with_rem_opts,
{json_feed,
erlang:element(2, _record@2),
erlang:element(3, _record@2),
erlang:element(4, _record@2),
erlang:element(5, _record@2),
erlang:element(6, _record@2),
erlang:element(7, _record@2),
erlang:element(8, _record@2),
erlang:element(9, _record@2),
erlang:element(10, _record@2),
erlang:element(11, _record@2),
erlang:element(12, _record@2),
erlang:element(13, _record@2),
erlang:element(14, _record@2),
begin
_pipe = erlang:element(6, Ins),
_pipe@1 = gleam@list:map(
_pipe,
fun(E) -> {erlang:element(2, E), erlang:element(3, E)} end
),
maps:from_list(_pipe@1)
end}
end,
Feed_item = feed_item(),
Final_items = begin
_pipe@2 = erlang:element(3, Ins),
gleam@list:map(
_pipe@2,
fun(Item) ->
Tags = begin
_pipe@3 = erlang:element(8, Item),
_pipe@4 = gleam@option:unwrap(_pipe@3, []),
gleam@list:filter_map(
_pipe@4,
fun(Cat) ->
{ok,
begin
_pipe@5 = erlang:element(2, Cat),
gleam@option:unwrap(_pipe@5, <<""/utf8>>)
end}
end
)
end,
Extensions = begin
_pipe@6 = erlang:element(18, Item),
_pipe@8 = gleam@list:filter_map(
_pipe@6,
fun(Ext) ->
{ok,
begin
_pipe@7 = Ext,
gleam@option:unwrap(_pipe@7, extension())
end}
end
),
gleam@list:map(
_pipe@8,
fun(Ext@1) ->
maps:from_list(
[{erlang:element(2, Ext@1),
erlang:element(3, Ext@1)}]
)
end
)
end,
Item_with_data = begin
_record@3 = Feed_item,
{json_item,
erlang:element(2, Item),
erlang:element(3, Item),
erlang:element(4, Item),
erlang:element(5, _record@3),
erlang:element(6, Item),
erlang:element(7, Item),
erlang:element(8, _record@3),
erlang:element(10, Item),
erlang:element(13, Item),
erlang:element(11, _record@3),
Tags,
begin
_pipe@9 = erlang:element(16, Item),
_pipe@10 = gleam@option:unwrap(_pipe@9, birl:now()),
birl:to_iso8601(_pipe@10)
end,
begin
_pipe@11 = erlang:element(5, Item),
birl:to_iso8601(_pipe@11)
end,
erlang:element(15, _record@3),
Extensions}
end,
case begin
_pipe@12 = erlang:element(14, Item),
_pipe@13 = gleam@option:unwrap(_pipe@12, []),
gleam@list:first(_pipe@13)
end of
{ok, Author@1} ->
_record@4 = Item_with_data,
{json_item,
erlang:element(2, _record@4),
erlang:element(3, _record@4),
erlang:element(4, _record@4),
erlang:element(5, _record@4),
erlang:element(6, _record@4),
erlang:element(7, _record@4),
erlang:element(8, _record@4),
erlang:element(9, _record@4),
erlang:element(10, _record@4),
{some, Author@1},
erlang:element(12, _record@4),
erlang:element(13, _record@4),
erlang:element(14, _record@4),
erlang:element(15, _record@4),
erlang:element(16, _record@4)};
{error, _} ->
Item_with_data
end
end
)
end,
Final_feed = begin
_record@5 = Feed_with_extensions,
{json_feed,
erlang:element(2, _record@5),
erlang:element(3, _record@5),
erlang:element(4, _record@5),
erlang:element(5, _record@5),
erlang:element(6, _record@5),
erlang:element(7, _record@5),
erlang:element(8, _record@5),
erlang:element(9, _record@5),
erlang:element(10, _record@5),
erlang:element(11, _record@5),
erlang:element(12, _record@5),
erlang:element(13, _record@5),
Final_items,
erlang:element(15, _record@5)}
end,
json_feed_to_json(Final_feed).