Current section
Files
Jump to
Current section
Files
src/glitch@types@scope.erl
-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).