Skip to main content

src/rocksky@decoders.erl

-module(rocksky@decoders).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/rocksky/decoders.gleam").
-export([profile/0, artist/0, album/0, song/0, scrobble/0, listener/0, stats/0, api_key/0, shout/0, list_in_field/2, unwrap/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(
    " Reusable `gleam/dynamic/decode` decoders for the public types in\n"
    " `rocksky/types`. These are exposed so callers can also decode raw\n"
    " `Dynamic` payloads themselves (e.g. embedded in custom responses).\n"
).

-file("src/rocksky/decoders.gleam", 33).
-spec opt_string(binary()) -> gleam@dynamic@decode:decoder(gleam@option:option(binary())).
opt_string(Name) ->
    gleam@dynamic@decode:optional_field(
        Name,
        none,
        gleam@dynamic@decode:map(
            {decoder, fun gleam@dynamic@decode:decode_string/1},
            fun(Field@0) -> {some, Field@0} end
        ),
        fun gleam@dynamic@decode:success/1
    ).

-file("src/rocksky/decoders.gleam", 42).
-spec opt_int(binary()) -> gleam@dynamic@decode:decoder(gleam@option:option(integer())).
opt_int(Name) ->
    gleam@dynamic@decode:optional_field(
        Name,
        none,
        gleam@dynamic@decode:map(
            {decoder, fun gleam@dynamic@decode:decode_int/1},
            fun(Field@0) -> {some, Field@0} end
        ),
        fun gleam@dynamic@decode:success/1
    ).

-file("src/rocksky/decoders.gleam", 51).
-spec opt_bool(binary()) -> gleam@dynamic@decode:decoder(gleam@option:option(boolean())).
opt_bool(Name) ->
    gleam@dynamic@decode:optional_field(
        Name,
        none,
        gleam@dynamic@decode:map(
            {decoder, fun gleam@dynamic@decode:decode_bool/1},
            fun(Field@0) -> {some, Field@0} end
        ),
        fun gleam@dynamic@decode:success/1
    ).

-file("src/rocksky/decoders.gleam", 60).
-spec string_list(binary()) -> gleam@dynamic@decode:decoder(list(binary())).
string_list(Name) ->
    gleam@dynamic@decode:optional_field(
        Name,
        [],
        gleam@dynamic@decode:list(
            {decoder, fun gleam@dynamic@decode:decode_string/1}
        ),
        fun gleam@dynamic@decode:success/1
    ).

-file("src/rocksky/decoders.gleam", 66).
-spec profile() -> gleam@dynamic@decode:decoder(rocksky@generated@types:actor_profile_view_basic()).
profile() ->
    gleam@dynamic@decode:then(
        opt_string(<<"id"/utf8>>),
        fun(Id) ->
            gleam@dynamic@decode:then(
                opt_string(<<"did"/utf8>>),
                fun(Did) ->
                    gleam@dynamic@decode:then(
                        opt_string(<<"handle"/utf8>>),
                        fun(Handle) ->
                            gleam@dynamic@decode:then(
                                opt_string(<<"displayName"/utf8>>),
                                fun(Display_name) ->
                                    gleam@dynamic@decode:then(
                                        opt_string(<<"avatar"/utf8>>),
                                        fun(Avatar) ->
                                            gleam@dynamic@decode:then(
                                                opt_string(<<"createdAt"/utf8>>),
                                                fun(Created_at) ->
                                                    gleam@dynamic@decode:then(
                                                        opt_string(
                                                            <<"updatedAt"/utf8>>
                                                        ),
                                                        fun(Updated_at) ->
                                                            gleam@dynamic@decode:success(
                                                                {actor_profile_view_basic,
                                                                    Id,
                                                                    Did,
                                                                    Handle,
                                                                    Display_name,
                                                                    Avatar,
                                                                    Created_at,
                                                                    Updated_at}
                                                            )
                                                        end
                                                    )
                                                end
                                            )
                                        end
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/rocksky/decoders.gleam", 85).
-spec artist() -> gleam@dynamic@decode:decoder(rocksky@generated@types:artist_view_basic()).
artist() ->
    gleam@dynamic@decode:then(
        opt_string(<<"id"/utf8>>),
        fun(Id) ->
            gleam@dynamic@decode:then(
                opt_string(<<"uri"/utf8>>),
                fun(Uri) ->
                    gleam@dynamic@decode:then(
                        opt_string(<<"name"/utf8>>),
                        fun(Name) ->
                            gleam@dynamic@decode:then(
                                opt_string(<<"picture"/utf8>>),
                                fun(Picture) ->
                                    gleam@dynamic@decode:then(
                                        opt_string(<<"sha256"/utf8>>),
                                        fun(Sha256) ->
                                            gleam@dynamic@decode:then(
                                                opt_int(<<"playCount"/utf8>>),
                                                fun(Play_count) ->
                                                    gleam@dynamic@decode:then(
                                                        opt_int(
                                                            <<"uniqueListeners"/utf8>>
                                                        ),
                                                        fun(Unique_listeners) ->
                                                            gleam@dynamic@decode:then(
                                                                string_list(
                                                                    <<"tags"/utf8>>
                                                                ),
                                                                fun(Tags) ->
                                                                    gleam@dynamic@decode:success(
                                                                        {artist_view_basic,
                                                                            Id,
                                                                            Uri,
                                                                            Name,
                                                                            Picture,
                                                                            Sha256,
                                                                            Play_count,
                                                                            Unique_listeners,
                                                                            Tags}
                                                                    )
                                                                end
                                                            )
                                                        end
                                                    )
                                                end
                                            )
                                        end
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/rocksky/decoders.gleam", 106).
-spec album() -> gleam@dynamic@decode:decoder(rocksky@generated@types:album_view_basic()).
album() ->
    gleam@dynamic@decode:then(
        opt_string(<<"id"/utf8>>),
        fun(Id) ->
            gleam@dynamic@decode:then(
                opt_string(<<"uri"/utf8>>),
                fun(Uri) ->
                    gleam@dynamic@decode:then(
                        opt_string(<<"title"/utf8>>),
                        fun(Title) ->
                            gleam@dynamic@decode:then(
                                opt_string(<<"artist"/utf8>>),
                                fun(Art_name) ->
                                    gleam@dynamic@decode:then(
                                        opt_string(<<"artistUri"/utf8>>),
                                        fun(Artist_uri) ->
                                            gleam@dynamic@decode:then(
                                                opt_int(<<"year"/utf8>>),
                                                fun(Year) ->
                                                    gleam@dynamic@decode:then(
                                                        opt_string(
                                                            <<"albumArt"/utf8>>
                                                        ),
                                                        fun(Album_art) ->
                                                            gleam@dynamic@decode:then(
                                                                opt_string(
                                                                    <<"releaseDate"/utf8>>
                                                                ),
                                                                fun(
                                                                    Release_date
                                                                ) ->
                                                                    gleam@dynamic@decode:then(
                                                                        opt_string(
                                                                            <<"sha256"/utf8>>
                                                                        ),
                                                                        fun(
                                                                            Sha256
                                                                        ) ->
                                                                            gleam@dynamic@decode:then(
                                                                                opt_int(
                                                                                    <<"playCount"/utf8>>
                                                                                ),
                                                                                fun(
                                                                                    Play_count
                                                                                ) ->
                                                                                    gleam@dynamic@decode:then(
                                                                                        opt_int(
                                                                                            <<"uniqueListeners"/utf8>>
                                                                                        ),
                                                                                        fun(
                                                                                            Unique_listeners
                                                                                        ) ->
                                                                                            gleam@dynamic@decode:success(
                                                                                                {album_view_basic,
                                                                                                    Id,
                                                                                                    Uri,
                                                                                                    Title,
                                                                                                    Art_name,
                                                                                                    Artist_uri,
                                                                                                    Year,
                                                                                                    Album_art,
                                                                                                    Release_date,
                                                                                                    Sha256,
                                                                                                    Play_count,
                                                                                                    Unique_listeners}
                                                                                            )
                                                                                        end
                                                                                    )
                                                                                end
                                                                            )
                                                                        end
                                                                    )
                                                                end
                                                            )
                                                        end
                                                    )
                                                end
                                            )
                                        end
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/rocksky/decoders.gleam", 133).
-spec song() -> gleam@dynamic@decode:decoder(rocksky@generated@types:song_view_basic()).
song() ->
    gleam@dynamic@decode:then(
        opt_string(<<"id"/utf8>>),
        fun(Id) ->
            gleam@dynamic@decode:then(
                opt_string(<<"uri"/utf8>>),
                fun(Uri) ->
                    gleam@dynamic@decode:then(
                        opt_string(<<"title"/utf8>>),
                        fun(Title) ->
                            gleam@dynamic@decode:then(
                                opt_string(<<"artist"/utf8>>),
                                fun(Art_name) ->
                                    gleam@dynamic@decode:then(
                                        opt_string(<<"albumArtist"/utf8>>),
                                        fun(Album_artist) ->
                                            gleam@dynamic@decode:then(
                                                opt_string(<<"album"/utf8>>),
                                                fun(Album) ->
                                                    gleam@dynamic@decode:then(
                                                        opt_string(
                                                            <<"albumArt"/utf8>>
                                                        ),
                                                        fun(Album_art) ->
                                                            gleam@dynamic@decode:then(
                                                                opt_string(
                                                                    <<"albumUri"/utf8>>
                                                                ),
                                                                fun(Album_uri) ->
                                                                    gleam@dynamic@decode:then(
                                                                        opt_string(
                                                                            <<"artistUri"/utf8>>
                                                                        ),
                                                                        fun(
                                                                            Artist_uri
                                                                        ) ->
                                                                            gleam@dynamic@decode:then(
                                                                                opt_int(
                                                                                    <<"duration"/utf8>>
                                                                                ),
                                                                                fun(
                                                                                    Duration
                                                                                ) ->
                                                                                    gleam@dynamic@decode:then(
                                                                                        opt_int(
                                                                                            <<"trackNumber"/utf8>>
                                                                                        ),
                                                                                        fun(
                                                                                            Track_number
                                                                                        ) ->
                                                                                            gleam@dynamic@decode:then(
                                                                                                opt_int(
                                                                                                    <<"discNumber"/utf8>>
                                                                                                ),
                                                                                                fun(
                                                                                                    Disc_number
                                                                                                ) ->
                                                                                                    gleam@dynamic@decode:then(
                                                                                                        opt_int(
                                                                                                            <<"playCount"/utf8>>
                                                                                                        ),
                                                                                                        fun(
                                                                                                            Play_count
                                                                                                        ) ->
                                                                                                            gleam@dynamic@decode:then(
                                                                                                                opt_int(
                                                                                                                    <<"uniqueListeners"/utf8>>
                                                                                                                ),
                                                                                                                fun(
                                                                                                                    Unique_listeners
                                                                                                                ) ->
                                                                                                                    gleam@dynamic@decode:then(
                                                                                                                        opt_string(
                                                                                                                            <<"sha256"/utf8>>
                                                                                                                        ),
                                                                                                                        fun(
                                                                                                                            Sha256
                                                                                                                        ) ->
                                                                                                                            gleam@dynamic@decode:then(
                                                                                                                                opt_string(
                                                                                                                                    <<"mbid"/utf8>>
                                                                                                                                ),
                                                                                                                                fun(
                                                                                                                                    Mbid
                                                                                                                                ) ->
                                                                                                                                    gleam@dynamic@decode:then(
                                                                                                                                        opt_string(
                                                                                                                                            <<"isrc"/utf8>>
                                                                                                                                        ),
                                                                                                                                        fun(
                                                                                                                                            Isrc
                                                                                                                                        ) ->
                                                                                                                                            gleam@dynamic@decode:then(
                                                                                                                                                string_list(
                                                                                                                                                    <<"tags"/utf8>>
                                                                                                                                                ),
                                                                                                                                                fun(
                                                                                                                                                    Tags
                                                                                                                                                ) ->
                                                                                                                                                    gleam@dynamic@decode:then(
                                                                                                                                                        opt_string(
                                                                                                                                                            <<"createdAt"/utf8>>
                                                                                                                                                        ),
                                                                                                                                                        fun(
                                                                                                                                                            Created_at
                                                                                                                                                        ) ->
                                                                                                                                                            gleam@dynamic@decode:success(
                                                                                                                                                                {song_view_basic,
                                                                                                                                                                    Id,
                                                                                                                                                                    Title,
                                                                                                                                                                    Art_name,
                                                                                                                                                                    Album_artist,
                                                                                                                                                                    Album_art,
                                                                                                                                                                    Uri,
                                                                                                                                                                    Album,
                                                                                                                                                                    Duration,
                                                                                                                                                                    Track_number,
                                                                                                                                                                    Disc_number,
                                                                                                                                                                    Play_count,
                                                                                                                                                                    Unique_listeners,
                                                                                                                                                                    Album_uri,
                                                                                                                                                                    Artist_uri,
                                                                                                                                                                    Sha256,
                                                                                                                                                                    Mbid,
                                                                                                                                                                    Isrc,
                                                                                                                                                                    Tags,
                                                                                                                                                                    Created_at}
                                                                                                                                                            )
                                                                                                                                                        end
                                                                                                                                                    )
                                                                                                                                                end
                                                                                                                                            )
                                                                                                                                        end
                                                                                                                                    )
                                                                                                                                end
                                                                                                                            )
                                                                                                                        end
                                                                                                                    )
                                                                                                                end
                                                                                                            )
                                                                                                        end
                                                                                                    )
                                                                                                end
                                                                                            )
                                                                                        end
                                                                                    )
                                                                                end
                                                                            )
                                                                        end
                                                                    )
                                                                end
                                                            )
                                                        end
                                                    )
                                                end
                                            )
                                        end
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/rocksky/decoders.gleam", 176).
-spec scrobble() -> gleam@dynamic@decode:decoder(rocksky@generated@types:scrobble_view_basic()).
scrobble() ->
    gleam@dynamic@decode:then(
        opt_string(<<"id"/utf8>>),
        fun(Id) ->
            gleam@dynamic@decode:then(
                opt_string(<<"uri"/utf8>>),
                fun(Uri) ->
                    gleam@dynamic@decode:then(
                        opt_string(<<"user"/utf8>>),
                        fun(User) ->
                            gleam@dynamic@decode:then(
                                opt_string(<<"userDisplayName"/utf8>>),
                                fun(User_display_name) ->
                                    gleam@dynamic@decode:then(
                                        opt_string(<<"userAvatar"/utf8>>),
                                        fun(User_avatar) ->
                                            gleam@dynamic@decode:then(
                                                opt_string(<<"title"/utf8>>),
                                                fun(Title) ->
                                                    gleam@dynamic@decode:then(
                                                        opt_string(
                                                            <<"artist"/utf8>>
                                                        ),
                                                        fun(Art_name) ->
                                                            gleam@dynamic@decode:then(
                                                                opt_string(
                                                                    <<"artistUri"/utf8>>
                                                                ),
                                                                fun(Artist_uri) ->
                                                                    gleam@dynamic@decode:then(
                                                                        opt_string(
                                                                            <<"album"/utf8>>
                                                                        ),
                                                                        fun(
                                                                            Album
                                                                        ) ->
                                                                            gleam@dynamic@decode:then(
                                                                                opt_string(
                                                                                    <<"albumUri"/utf8>>
                                                                                ),
                                                                                fun(
                                                                                    Album_uri
                                                                                ) ->
                                                                                    gleam@dynamic@decode:then(
                                                                                        opt_string(
                                                                                            <<"cover"/utf8>>
                                                                                        ),
                                                                                        fun(
                                                                                            Cover
                                                                                        ) ->
                                                                                            gleam@dynamic@decode:then(
                                                                                                opt_string(
                                                                                                    <<"date"/utf8>>
                                                                                                ),
                                                                                                fun(
                                                                                                    Date
                                                                                                ) ->
                                                                                                    gleam@dynamic@decode:then(
                                                                                                        opt_string(
                                                                                                            <<"sha256"/utf8>>
                                                                                                        ),
                                                                                                        fun(
                                                                                                            Sha256
                                                                                                        ) ->
                                                                                                            gleam@dynamic@decode:then(
                                                                                                                opt_bool(
                                                                                                                    <<"liked"/utf8>>
                                                                                                                ),
                                                                                                                fun(
                                                                                                                    Liked
                                                                                                                ) ->
                                                                                                                    gleam@dynamic@decode:then(
                                                                                                                        opt_int(
                                                                                                                            <<"likesCount"/utf8>>
                                                                                                                        ),
                                                                                                                        fun(
                                                                                                                            Likes_count
                                                                                                                        ) ->
                                                                                                                            gleam@dynamic@decode:success(
                                                                                                                                {scrobble_view_basic,
                                                                                                                                    Id,
                                                                                                                                    User,
                                                                                                                                    User_display_name,
                                                                                                                                    User_avatar,
                                                                                                                                    Title,
                                                                                                                                    Art_name,
                                                                                                                                    Artist_uri,
                                                                                                                                    Album,
                                                                                                                                    Album_uri,
                                                                                                                                    Cover,
                                                                                                                                    Date,
                                                                                                                                    Uri,
                                                                                                                                    Sha256,
                                                                                                                                    Liked,
                                                                                                                                    Likes_count}
                                                                                                                            )
                                                                                                                        end
                                                                                                                    )
                                                                                                                end
                                                                                                            )
                                                                                                        end
                                                                                                    )
                                                                                                end
                                                                                            )
                                                                                        end
                                                                                    )
                                                                                end
                                                                            )
                                                                        end
                                                                    )
                                                                end
                                                            )
                                                        end
                                                    )
                                                end
                                            )
                                        end
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/rocksky/decoders.gleam", 211).
-spec listener() -> gleam@dynamic@decode:decoder(rocksky@generated@types:song_recent_listener_view()).
listener() ->
    gleam@dynamic@decode:then(
        opt_string(<<"id"/utf8>>),
        fun(Id) ->
            gleam@dynamic@decode:then(
                opt_string(<<"did"/utf8>>),
                fun(Did) ->
                    gleam@dynamic@decode:then(
                        opt_string(<<"handle"/utf8>>),
                        fun(Handle) ->
                            gleam@dynamic@decode:then(
                                opt_string(<<"displayName"/utf8>>),
                                fun(Display_name) ->
                                    gleam@dynamic@decode:then(
                                        opt_string(<<"avatar"/utf8>>),
                                        fun(Avatar) ->
                                            gleam@dynamic@decode:then(
                                                opt_string(<<"timestamp"/utf8>>),
                                                fun(Timestamp) ->
                                                    gleam@dynamic@decode:then(
                                                        opt_string(
                                                            <<"scrobbleUri"/utf8>>
                                                        ),
                                                        fun(Scrobble_uri) ->
                                                            gleam@dynamic@decode:success(
                                                                {song_recent_listener_view,
                                                                    Id,
                                                                    Did,
                                                                    Handle,
                                                                    Display_name,
                                                                    Avatar,
                                                                    Timestamp,
                                                                    Scrobble_uri}
                                                            )
                                                        end
                                                    )
                                                end
                                            )
                                        end
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/rocksky/decoders.gleam", 230).
-spec stats() -> gleam@dynamic@decode:decoder(rocksky@generated@types:stats_view()).
stats() ->
    gleam@dynamic@decode:then(
        opt_int(<<"scrobbles"/utf8>>),
        fun(Scrobbles) ->
            gleam@dynamic@decode:then(
                opt_int(<<"artists"/utf8>>),
                fun(Artists) ->
                    gleam@dynamic@decode:then(
                        opt_int(<<"lovedTracks"/utf8>>),
                        fun(Loved_tracks) ->
                            gleam@dynamic@decode:then(
                                opt_int(<<"albums"/utf8>>),
                                fun(Albums) ->
                                    gleam@dynamic@decode:then(
                                        opt_int(<<"tracks"/utf8>>),
                                        fun(Tracks) ->
                                            gleam@dynamic@decode:success(
                                                {stats_view,
                                                    Scrobbles,
                                                    Artists,
                                                    Loved_tracks,
                                                    Albums,
                                                    Tracks}
                                            )
                                        end
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/rocksky/decoders.gleam", 245).
-spec api_key() -> gleam@dynamic@decode:decoder(rocksky@types:api_key()).
api_key() ->
    gleam@dynamic@decode:then(
        opt_string(<<"id"/utf8>>),
        fun(Id) ->
            gleam@dynamic@decode:then(
                opt_string(<<"name"/utf8>>),
                fun(Name) ->
                    gleam@dynamic@decode:then(
                        opt_string(<<"description"/utf8>>),
                        fun(Description) ->
                            gleam@dynamic@decode:then(
                                opt_string(<<"key"/utf8>>),
                                fun(Key) ->
                                    gleam@dynamic@decode:then(
                                        opt_string(<<"createdAt"/utf8>>),
                                        fun(Created_at) ->
                                            gleam@dynamic@decode:success(
                                                {api_key,
                                                    Id,
                                                    Name,
                                                    Description,
                                                    Key,
                                                    Created_at}
                                            )
                                        end
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/rocksky/decoders.gleam", 260).
-spec shout() -> gleam@dynamic@decode:decoder(rocksky@types:shout()).
shout() ->
    gleam@dynamic@decode:then(
        opt_string(<<"id"/utf8>>),
        fun(Id) ->
            gleam@dynamic@decode:then(
                opt_string(<<"uri"/utf8>>),
                fun(Uri) ->
                    gleam@dynamic@decode:then(
                        opt_string(<<"authorDid"/utf8>>),
                        fun(Author_did) ->
                            gleam@dynamic@decode:then(
                                opt_string(<<"authorHandle"/utf8>>),
                                fun(Author_handle) ->
                                    gleam@dynamic@decode:then(
                                        opt_string(<<"authorAvatar"/utf8>>),
                                        fun(Author_avatar) ->
                                            gleam@dynamic@decode:then(
                                                opt_string(<<"message"/utf8>>),
                                                fun(Message) ->
                                                    gleam@dynamic@decode:then(
                                                        opt_string(
                                                            <<"createdAt"/utf8>>
                                                        ),
                                                        fun(Created_at) ->
                                                            gleam@dynamic@decode:then(
                                                                opt_int(
                                                                    <<"likesCount"/utf8>>
                                                                ),
                                                                fun(Likes_count) ->
                                                                    gleam@dynamic@decode:then(
                                                                        opt_int(
                                                                            <<"repliesCount"/utf8>>
                                                                        ),
                                                                        fun(
                                                                            Replies_count
                                                                        ) ->
                                                                            gleam@dynamic@decode:then(
                                                                                opt_bool(
                                                                                    <<"liked"/utf8>>
                                                                                ),
                                                                                fun(
                                                                                    Liked
                                                                                ) ->
                                                                                    gleam@dynamic@decode:success(
                                                                                        {shout,
                                                                                            Id,
                                                                                            Uri,
                                                                                            Author_did,
                                                                                            Author_handle,
                                                                                            Author_avatar,
                                                                                            Message,
                                                                                            Created_at,
                                                                                            Likes_count,
                                                                                            Replies_count,
                                                                                            Liked}
                                                                                    )
                                                                                end
                                                                            )
                                                                        end
                                                                    )
                                                                end
                                                            )
                                                        end
                                                    )
                                                end
                                            )
                                        end
                                    )
                                end
                            )
                        end
                    )
                end
            )
        end
    ).

-file("src/rocksky/decoders.gleam", 286).
?DOC(" Convenience: decode an object whose `key` field is a list of `inner`.\n").
-spec list_in_field(binary(), gleam@dynamic@decode:decoder(GQU)) -> gleam@dynamic@decode:decoder(list(GQU)).
list_in_field(Key, Inner) ->
    gleam@dynamic@decode:optional_field(
        Key,
        [],
        gleam@dynamic@decode:list(Inner),
        fun gleam@dynamic@decode:success/1
    ).

-file("src/rocksky/decoders.gleam", 297).
?DOC(
    " Decode `{ items: [...] }`-shaped responses into a list of items.\n"
    " Many Rocksky list endpoints wrap their array in a single object field\n"
    " (e.g. `{ \"scrobbles\": [...] }`, `{ \"songs\": [...] }`). This helper hides\n"
    " that detail from callers that just want the list.\n"
).
-spec unwrap(binary(), gleam@dynamic@decode:decoder(GQY)) -> gleam@dynamic@decode:decoder(list(GQY)).
unwrap(Field_name, Inner) ->
    gleam@dynamic@decode:optional_field(
        Field_name,
        [],
        gleam@dynamic@decode:list(Inner),
        fun gleam@dynamic@decode:success/1
    ).