-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, add_item/2, add_category/2, add_contributor/2, add_extension/2, link/0, extension/0, enclosure/0, author/0, new/1, 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", 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).