-module(glitch@types@scope). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([to_string/1, from_string/1, decoder/0, to_json/1, from_json/1]). -export_type([scope/0, scope_error/0]). -type scope() :: analytics_read_extensions | analytics_read_games | bits_read | channel_manage_ads | channel_read_ads | channel_manage_broadcast | channel_read_charity | channel_edit_commercial | channel_read_editors | channel_manage_extensions | channel_read_goals | channel_read_guest_star | channel_manage_guest_star | channel_read_hype_train | channel_manage_moderators | channel_read_polls | channel_manage_polls | channel_read_predictions | channel_manage_predictions | channel_manage_raids | channel_read_redemptions | channel_manage_redemptions | channel_manage_schedule | channel_read_stream_key | channel_read_subscriptions | channel_manage_videos | channel_read_vips | channel_manage_vips | clips_edit | moderation_read | moderator_manage_announcements | moderator_manage_automod | moderator_read_automod_settings | moderator_manage_automod_settings | moderator_manage_banned_users | moderator_read_blocked_terms | moderator_manage_blocked_terms | moderator_manage_chat_messages | moderator_read_chat_settings | moderator_manage_chat_settings | moderator_read_chatters | moderator_read_followers | moderator_read_guest_star | moderator_manage_guest_star | moderator_read_shield_mode | moderator_manage_shield_mode | moderator_read_shoutouts | moderator_manage_shoutouts | moderator_read_unban_requests | moderator_manage_unban_requests | user_edit | user_edit_follows | user_read_blocked_users | user_manage_blocked_users | user_read_broadcast | user_manage_chat_color | user_read_email | user_read_emotes | user_read_follows | user_read_moderated_channels | user_read_subscriptions | user_manage_whispers | channel_bot | channel_moderate | chat_edit | chat_read | user_bot | user_read_chat | user_write_chat | whispers_read | whispers_edit. -type scope_error() :: {invalid_scope, binary()} | {decode_error, gleam@json:decode_error()}. -spec to_string(scope()) -> binary(). to_string(Scope) -> case Scope of analytics_read_extensions -> <<"analytics:read:extensions"/utf8>>; analytics_read_games -> <<"analytics:read:games"/utf8>>; bits_read -> <<"bits:read"/utf8>>; channel_manage_ads -> <<"channel:manage:ads"/utf8>>; channel_read_ads -> <<"channel:read:ads"/utf8>>; channel_manage_broadcast -> <<"channel:manage:broadcast"/utf8>>; channel_read_charity -> <<"channel:read:charity"/utf8>>; channel_edit_commercial -> <<"channel:edit:commercial"/utf8>>; channel_read_editors -> <<"channel:read:editors"/utf8>>; channel_manage_extensions -> <<"channel:manage:extensions"/utf8>>; channel_read_goals -> <<"channel:read:goals"/utf8>>; channel_read_guest_star -> <<"channel:read:guest_star"/utf8>>; channel_manage_guest_star -> <<"channel:manage:guest_star"/utf8>>; channel_read_hype_train -> <<"channel:read:hype_train"/utf8>>; channel_manage_moderators -> <<"channel:manage:moderators"/utf8>>; channel_read_polls -> <<"channel:read:polls"/utf8>>; channel_manage_polls -> <<"channel:manage:polls"/utf8>>; channel_read_predictions -> <<"channel:read:predictions"/utf8>>; channel_manage_predictions -> <<"channel:manage:predictions"/utf8>>; channel_manage_raids -> <<"channel:manage:raids"/utf8>>; channel_read_redemptions -> <<"channel:read:redemptions"/utf8>>; channel_manage_redemptions -> <<"channel:manage:redemptions"/utf8>>; channel_manage_schedule -> <<"channel:manage:schedule"/utf8>>; channel_read_stream_key -> <<"channel:read:stream_key"/utf8>>; channel_read_subscriptions -> <<"channel:read:subscriptions"/utf8>>; channel_manage_videos -> <<"channel:manage:videos"/utf8>>; channel_read_vips -> <<"channel:read:vips"/utf8>>; channel_manage_vips -> <<"channel:manage:vips"/utf8>>; clips_edit -> <<"clips:edit"/utf8>>; moderation_read -> <<"moderation:read"/utf8>>; moderator_manage_announcements -> <<"moderator:manage:announcements"/utf8>>; moderator_manage_automod -> <<"moderator:manage:automod"/utf8>>; moderator_read_automod_settings -> <<"moderator:read:automod_settings"/utf8>>; moderator_manage_automod_settings -> <<"moderator:manage:automod_settings"/utf8>>; moderator_manage_banned_users -> <<"moderator:manage:banned_users"/utf8>>; moderator_read_blocked_terms -> <<"moderator:read:blocked_terms"/utf8>>; moderator_manage_blocked_terms -> <<"moderator:manage:blocked_terms"/utf8>>; moderator_manage_chat_messages -> <<"moderator:manage:chat_messages"/utf8>>; moderator_read_chat_settings -> <<"moderator:read:chat_settings"/utf8>>; moderator_manage_chat_settings -> <<"moderator:manage:chat_settings"/utf8>>; moderator_read_chatters -> <<"moderator:read:chatters"/utf8>>; moderator_read_followers -> <<"moderator:read:followers"/utf8>>; moderator_read_guest_star -> <<"moderator:read:guest_star"/utf8>>; moderator_manage_guest_star -> <<"moderator:manage:guest_star"/utf8>>; moderator_read_shield_mode -> <<"moderator:read:shield_mode"/utf8>>; moderator_manage_shield_mode -> <<"moderator:manage:shield_mode"/utf8>>; moderator_read_shoutouts -> <<"moderator:read:shoutouts"/utf8>>; moderator_manage_shoutouts -> <<"moderator:manage:shoutouts"/utf8>>; moderator_read_unban_requests -> <<"moderator:read:unban_requests"/utf8>>; moderator_manage_unban_requests -> <<"moderator:manage:unban_requests"/utf8>>; user_edit -> <<"user:edit"/utf8>>; user_edit_follows -> <<"user:edit:follows"/utf8>>; user_read_blocked_users -> <<"user:read:blocked_users"/utf8>>; user_manage_blocked_users -> <<"user:manage:blocked_users"/utf8>>; user_read_broadcast -> <<"user:read:broadcast"/utf8>>; user_manage_chat_color -> <<"user:manage:chat_color"/utf8>>; user_read_email -> <<"user:read:email"/utf8>>; user_read_emotes -> <<"user:read:emotes"/utf8>>; user_read_follows -> <<"user:read:follows"/utf8>>; user_read_moderated_channels -> <<"user:read:moderated_channels"/utf8>>; user_read_subscriptions -> <<"user:read:subscriptions"/utf8>>; user_manage_whispers -> <<"user:manage:whispers"/utf8>>; channel_bot -> <<"channel:bot"/utf8>>; channel_moderate -> <<"channel:moderate"/utf8>>; chat_edit -> <<"chat:edit"/utf8>>; chat_read -> <<"chat:read"/utf8>>; user_bot -> <<"user:bot"/utf8>>; user_read_chat -> <<"user:read:chat"/utf8>>; user_write_chat -> <<"user:write:chat"/utf8>>; whispers_read -> <<"whispers:read"/utf8>>; whispers_edit -> <<"whispers:edit"/utf8>> end. -spec from_string(binary()) -> {ok, scope()} | {error, scope_error()}. from_string(Str) -> case Str of <<"analytics:read:extensions"/utf8>> -> {ok, analytics_read_extensions}; <<"analytics:read:games"/utf8>> -> {ok, analytics_read_games}; <<"bits:read"/utf8>> -> {ok, bits_read}; <<"channel:manage:ads"/utf8>> -> {ok, channel_manage_ads}; <<"channel:read:ads"/utf8>> -> {ok, channel_read_ads}; <<"channel:manage:broadcast"/utf8>> -> {ok, channel_manage_broadcast}; <<"channel:read:charity"/utf8>> -> {ok, channel_read_charity}; <<"channel:edit:commercial"/utf8>> -> {ok, channel_edit_commercial}; <<"channel:read:editors"/utf8>> -> {ok, channel_read_editors}; <<"channel:manage:extensions"/utf8>> -> {ok, channel_manage_extensions}; <<"channel:read:goals"/utf8>> -> {ok, channel_read_goals}; <<"channel:read:guest_star"/utf8>> -> {ok, channel_read_guest_star}; <<"channel:manage:guest_star"/utf8>> -> {ok, channel_manage_guest_star}; <<"channel:read:hype_train"/utf8>> -> {ok, channel_read_hype_train}; <<"channel:manage:moderators"/utf8>> -> {ok, channel_manage_moderators}; <<"channel:read:polls"/utf8>> -> {ok, channel_read_polls}; <<"channel:manage:polls"/utf8>> -> {ok, channel_manage_polls}; <<"channel:read:predictions"/utf8>> -> {ok, channel_read_predictions}; <<"channel:manage:predictions"/utf8>> -> {ok, channel_manage_predictions}; <<"channel:manage:raids"/utf8>> -> {ok, channel_manage_raids}; <<"channel:read:redemptions"/utf8>> -> {ok, channel_read_redemptions}; <<"channel:manage:redemptions"/utf8>> -> {ok, channel_manage_redemptions}; <<"channel:manage:schedule"/utf8>> -> {ok, channel_manage_schedule}; <<"channel:read:stream_key"/utf8>> -> {ok, channel_read_stream_key}; <<"channel:read:subscriptions"/utf8>> -> {ok, channel_read_subscriptions}; <<"channel:manage:videos"/utf8>> -> {ok, channel_manage_videos}; <<"channel:read:vips"/utf8>> -> {ok, channel_read_vips}; <<"channel:manage:vips"/utf8>> -> {ok, channel_manage_vips}; <<"clips:edit"/utf8>> -> {ok, clips_edit}; <<"moderation:read"/utf8>> -> {ok, moderation_read}; <<"moderator:manage:announcements"/utf8>> -> {ok, moderator_manage_announcements}; <<"moderator:manage:automod"/utf8>> -> {ok, moderator_manage_automod}; <<"moderator:read:automod_settings"/utf8>> -> {ok, moderator_read_automod_settings}; <<"moderator:manage:automod_settings"/utf8>> -> {ok, moderator_manage_automod_settings}; <<"moderator:manage:banned_users"/utf8>> -> {ok, moderator_manage_banned_users}; <<"moderator:read:blocked_terms"/utf8>> -> {ok, moderator_read_blocked_terms}; <<"moderator:manage:blocked_terms"/utf8>> -> {ok, moderator_manage_blocked_terms}; <<"moderator:manage:chat_messages"/utf8>> -> {ok, moderator_manage_chat_messages}; <<"moderator:read:chat_settings"/utf8>> -> {ok, moderator_read_chat_settings}; <<"moderator:manage:chat_settings"/utf8>> -> {ok, moderator_manage_chat_settings}; <<"moderator:read:chatters"/utf8>> -> {ok, moderator_read_chatters}; <<"moderator:read:followers"/utf8>> -> {ok, moderator_read_followers}; <<"moderator:read:guest_star"/utf8>> -> {ok, moderator_read_guest_star}; <<"moderator:manage:guest_star"/utf8>> -> {ok, moderator_manage_guest_star}; <<"moderator:read:shield_mode"/utf8>> -> {ok, moderator_read_shield_mode}; <<"moderator:manage:shield_mode"/utf8>> -> {ok, moderator_manage_shield_mode}; <<"moderator:read:shoutouts"/utf8>> -> {ok, moderator_read_shoutouts}; <<"moderator:manage:shoutouts"/utf8>> -> {ok, moderator_manage_shoutouts}; <<"moderator:read:unban_requests"/utf8>> -> {ok, moderator_read_unban_requests}; <<"moderator:manage:unban_requests"/utf8>> -> {ok, moderator_manage_unban_requests}; <<"user:edit"/utf8>> -> {ok, user_edit}; <<"user:edit:follows"/utf8>> -> {ok, user_edit_follows}; <<"user:read:blocked_users"/utf8>> -> {ok, user_read_blocked_users}; <<"user:manage:blocked_users"/utf8>> -> {ok, user_manage_blocked_users}; <<"user:read:broadcast"/utf8>> -> {ok, user_read_broadcast}; <<"user:manage:chat_color"/utf8>> -> {ok, user_manage_chat_color}; <<"user:read:email"/utf8>> -> {ok, user_read_email}; <<"user:read:emotes"/utf8>> -> {ok, user_read_emotes}; <<"user:read:follows"/utf8>> -> {ok, user_read_follows}; <<"user:read:moderated_channels"/utf8>> -> {ok, user_read_moderated_channels}; <<"user:read:subscriptions"/utf8>> -> {ok, user_read_subscriptions}; <<"user:manage:whispers"/utf8>> -> {ok, user_manage_whispers}; <<"channel:bot"/utf8>> -> {ok, channel_bot}; <<"channel:moderate"/utf8>> -> {ok, channel_moderate}; <<"chat:edit"/utf8>> -> {ok, chat_edit}; <<"chat:read"/utf8>> -> {ok, chat_read}; <<"user:bot"/utf8>> -> {ok, user_bot}; <<"user:read:chat"/utf8>> -> {ok, user_read_chat}; <<"user:write:chat"/utf8>> -> {ok, user_write_chat}; <<"whispers:read"/utf8>> -> {ok, whispers_read}; <<"whispers:edit"/utf8>> -> {ok, whispers_edit}; _ -> {error, {invalid_scope, Str}} end. -spec decoder() -> fun((gleam@dynamic:dynamic_()) -> {ok, scope()} | {error, list(gleam@dynamic:decode_error())}). decoder() -> fun(Data) -> gleam@result:'try'( gleam@dynamic:string(Data), fun(String) -> _pipe = String, _pipe@1 = from_string(_pipe), gleam@result:replace_error( _pipe@1, [{decode_error, <<"Scope"/utf8>>, <<<<"String("/utf8, String/binary>>/binary, ")"/utf8>>, []}] ) end ) end. -spec to_json(scope()) -> gleam@json:json(). to_json(Scope) -> _pipe = Scope, _pipe@1 = to_string(_pipe), gleam@json:string(_pipe@1). -spec from_json(binary()) -> {ok, scope()} | {error, scope_error()}. from_json(Json_string) -> _pipe = Json_string, _pipe@1 = gleam@json:decode(_pipe, fun gleam@dynamic:string/1), _pipe@2 = gleam@result:map_error( _pipe@1, fun(Field@0) -> {decode_error, Field@0} end ), gleam@result:'try'(_pipe@2, fun from_string/1).