Files
core/crates/dever-core/src/intrinsic.rs
T

355 lines
11 KiB
Rust

#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub(crate) enum Intrinsic {
TestAssert,
TestAssertEq,
TestSecret,
JobServe,
TestJobDrain,
TestClockAdvance,
CryptoToken,
CryptoPasswordHash,
CryptoPasswordVerify,
CryptoSha256,
CryptoHmacSha256,
CryptoConstantTimeEq,
TextTrim,
TextLower,
TextUpper,
TextCodepoint,
TextFromCodepoint,
TextAt,
TextSlice,
TextIndexOf,
TextContains,
TextStartsWith,
TextEndsWith,
TextSplit,
TextReplace,
IntParse,
IntToText,
DecimalParse,
DecimalToText,
DecimalFromInt,
FloatParse,
FloatToText,
ProcessArguments,
TimeUnixMillis,
TimeNow,
TimeParseDateTime,
TimeFormatDateTime,
TimeParseDate,
TimeFormatDate,
TimeParseTime,
TimeFormatTime,
TimeDuration,
TimeAdd,
TimeSubtract,
TimeDifference,
TimeMonotonicNanos,
TimeSleep,
TaskSleep,
TaskTicks,
TaskTimeout,
TaskRace,
StreamOf,
TlsSystem,
TlsClient,
TlsServer,
HttpClientNew,
HttpRequest,
HttpOpen,
HttpOpenStream,
HttpCloseClient,
HttpServeTls,
HttpServeLiveTls,
WsOpen,
DecimalRound,
FloatFromInt,
FloatSqrt,
FloatSin,
FloatCos,
FloatLog,
FloatPow,
FloatIsNan,
FloatIsFinite,
FloatIsInfinite,
StdoutWrite,
LogDebug,
LogInfo,
LogWarn,
LogError,
IdFromText,
IdToText,
UuidParse,
UuidToText,
BytesFromText,
BytesToText,
BytesFromInts,
BytesLength,
BytesAt,
BytesSlice,
BytesConcat,
FileOpen,
FileCreate,
FileRead,
FileWrite,
FileClose,
FileChunks,
TcpConnect,
TcpConnectTimeout,
TcpListen,
TcpAccept,
TcpPort,
TcpRead,
TcpWrite,
TcpTimeout,
TcpClose,
TcpCloseListener,
TcpChunks,
TcpConnections,
HttpServe,
ApiServe,
UploadFilename,
UploadContentType,
UploadSize,
UploadClose,
UploadStore,
ApiRequestId,
ApiMethod,
ApiPath,
ApiClientAddress,
ApiHeader,
ApiCookie,
ApiSecretCookie,
ApiResponseHeader,
ApiResponseCookie,
ApiResponseSecretCookie,
AuthIssue,
AuthIssueCookie,
AuthClearCookie,
AuthOwnsUser,
AuthId,
AuthSession,
AuthUserId,
AuthTenantId,
AuthPermissions,
AuthSaveRole,
AuthGrantRole,
AuthRevokeRole,
AuthDisableRole,
SiteKey,
HttpSend,
HttpServeLive,
HttpRespond,
HttpStart,
HttpWrite,
HttpFinish,
SseStart,
SseSend,
WsAccept,
WsConnect,
WsSend,
WsReceive,
WsMessages,
WsClose,
}
impl Intrinsic {
pub fn is_async(self) -> bool {
matches!(
self,
Self::UploadStore
| Self::HttpClientNew
| Self::HttpRequest
| Self::HttpOpen
| Self::HttpOpenStream
| Self::HttpCloseClient
| Self::HttpServeTls
| Self::HttpServeLiveTls
| Self::WsOpen
| Self::TaskTicks
| Self::TaskSleep
| Self::TaskTimeout
| Self::TaskRace
| Self::TcpConnect
| Self::TcpConnectTimeout
| Self::TcpListen
| Self::TcpAccept
| Self::TcpRead
| Self::TcpWrite
| Self::HttpServe
| Self::ApiServe
| Self::JobServe
| Self::TestJobDrain
| Self::HttpSend
| Self::HttpServeLive
| Self::HttpRespond
| Self::HttpStart
| Self::HttpWrite
| Self::HttpFinish
| Self::SseStart
| Self::SseSend
| Self::AuthPermissions
| Self::AuthSaveRole
| Self::AuthGrantRole
| Self::AuthRevokeRole
| Self::AuthDisableRole
| Self::WsAccept
| Self::WsConnect
| Self::WsSend
| Self::WsReceive
| Self::WsClose
)
}
pub fn from_name(name: &str) -> Option<Self> {
match name {
"dever.test.drain_jobs" => return Some(Self::TestJobDrain),
"dever.test.advance_clock" => return Some(Self::TestClockAdvance),
"dever.auth.owns_user" => return Some(Self::AuthOwnsUser),
_ => {}
}
Some(match name.strip_prefix("dever.system.")? {
"job_serve" => Self::JobServe,
"text_trim" => Self::TextTrim,
"text_lower" => Self::TextLower,
"text_upper" => Self::TextUpper,
"text_codepoint" => Self::TextCodepoint,
"text_from_codepoint" => Self::TextFromCodepoint,
"text_at" => Self::TextAt,
"text_slice" => Self::TextSlice,
"text_index_of" => Self::TextIndexOf,
"text_contains" => Self::TextContains,
"text_starts_with" => Self::TextStartsWith,
"text_ends_with" => Self::TextEndsWith,
"text_split" => Self::TextSplit,
"text_replace" => Self::TextReplace,
"int_parse" => Self::IntParse,
"int_to_text" => Self::IntToText,
"decimal_parse" => Self::DecimalParse,
"decimal_to_text" => Self::DecimalToText,
"decimal_from_int" => Self::DecimalFromInt,
"float_parse" => Self::FloatParse,
"float_to_text" => Self::FloatToText,
"process_arguments" => Self::ProcessArguments,
"crypto_token" => Self::CryptoToken,
"crypto_password_hash" => Self::CryptoPasswordHash,
"crypto_password_verify" => Self::CryptoPasswordVerify,
"crypto_sha256" => Self::CryptoSha256,
"crypto_hmac_sha256" => Self::CryptoHmacSha256,
"crypto_constant_time_eq" => Self::CryptoConstantTimeEq,
"time_unix_millis" => Self::TimeUnixMillis,
"time_now" => Self::TimeNow,
"time_parse_datetime" => Self::TimeParseDateTime,
"time_format_datetime" => Self::TimeFormatDateTime,
"time_parse_date" => Self::TimeParseDate,
"time_format_date" => Self::TimeFormatDate,
"time_parse_time" => Self::TimeParseTime,
"time_format_time" => Self::TimeFormatTime,
"time_duration" => Self::TimeDuration,
"time_add" => Self::TimeAdd,
"time_subtract" => Self::TimeSubtract,
"time_difference" => Self::TimeDifference,
"time_monotonic_nanos" => Self::TimeMonotonicNanos,
"time_sleep" => Self::TimeSleep,
"task_sleep" => Self::TaskSleep,
"task_ticks" => Self::TaskTicks,
"tls_system" => Self::TlsSystem,
"tls_client" => Self::TlsClient,
"tls_server" => Self::TlsServer,
"http_client" => Self::HttpClientNew,
"http_request" => Self::HttpRequest,
"http_open" => Self::HttpOpen,
"http_open_stream" => Self::HttpOpenStream,
"http_close_client" => Self::HttpCloseClient,
"http_serve_tls" => Self::HttpServeTls,
"http_serve_live_tls" => Self::HttpServeLiveTls,
"ws_open" => Self::WsOpen,
"decimal_round" => Self::DecimalRound,
"float_from_int" => Self::FloatFromInt,
"float_sqrt" => Self::FloatSqrt,
"float_sin" => Self::FloatSin,
"float_cos" => Self::FloatCos,
"float_log" => Self::FloatLog,
"float_pow" => Self::FloatPow,
"float_is_nan" => Self::FloatIsNan,
"float_is_finite" => Self::FloatIsFinite,
"float_is_infinite" => Self::FloatIsInfinite,
"stdout_write" => Self::StdoutWrite,
"log_debug" => Self::LogDebug,
"log_info" => Self::LogInfo,
"log_warn" => Self::LogWarn,
"log_error" => Self::LogError,
"id_from_text" => Self::IdFromText,
"id_to_text" => Self::IdToText,
"uuid_parse" => Self::UuidParse,
"uuid_to_text" => Self::UuidToText,
"bytes_from_text" => Self::BytesFromText,
"bytes_to_text" => Self::BytesToText,
"bytes_from_ints" => Self::BytesFromInts,
"bytes_length" => Self::BytesLength,
"bytes_at" => Self::BytesAt,
"bytes_slice" => Self::BytesSlice,
"bytes_concat" => Self::BytesConcat,
"file_open" => Self::FileOpen,
"file_create" => Self::FileCreate,
"file_read" => Self::FileRead,
"file_write" => Self::FileWrite,
"file_close" => Self::FileClose,
"file_chunks" => Self::FileChunks,
"tcp_connect" => Self::TcpConnect,
"tcp_connect_timeout" => Self::TcpConnectTimeout,
"tcp_listen" => Self::TcpListen,
"tcp_accept" => Self::TcpAccept,
"tcp_port" => Self::TcpPort,
"tcp_read" => Self::TcpRead,
"tcp_write" => Self::TcpWrite,
"tcp_timeout" => Self::TcpTimeout,
"tcp_close" => Self::TcpClose,
"tcp_close_listener" => Self::TcpCloseListener,
"tcp_chunks" => Self::TcpChunks,
"tcp_connections" => Self::TcpConnections,
"http_serve" => Self::HttpServe,
"api_serve" => Self::ApiServe,
"api_request_id" => Self::ApiRequestId,
"api_method" => Self::ApiMethod,
"api_path" => Self::ApiPath,
"api_client_address" => Self::ApiClientAddress,
"api_header" => Self::ApiHeader,
"api_cookie" => Self::ApiCookie,
"api_secret_cookie" => Self::ApiSecretCookie,
"api_response_header" => Self::ApiResponseHeader,
"api_response_cookie" => Self::ApiResponseCookie,
"api_response_secret_cookie" => Self::ApiResponseSecretCookie,
"auth_issue" => Self::AuthIssue,
"auth_issue_cookie" => Self::AuthIssueCookie,
"auth_clear_cookie" => Self::AuthClearCookie,
"auth_id" => Self::AuthId,
"auth_session" => Self::AuthSession,
"auth_user_id" => Self::AuthUserId,
"auth_tenant_id" => Self::AuthTenantId,
"auth_permissions" => Self::AuthPermissions,
"auth_save_role" => Self::AuthSaveRole,
"auth_grant_role" => Self::AuthGrantRole,
"auth_revoke_role" => Self::AuthRevokeRole,
"auth_disable_role" => Self::AuthDisableRole,
"site_key" => Self::SiteKey,
"http_send" => Self::HttpSend,
"http_serve_live" => Self::HttpServeLive,
"http_respond" => Self::HttpRespond,
"http_start" => Self::HttpStart,
"http_write" => Self::HttpWrite,
"http_finish" => Self::HttpFinish,
"sse_start" => Self::SseStart,
"sse_send" => Self::SseSend,
"ws_accept" => Self::WsAccept,
"ws_connect" => Self::WsConnect,
"ws_send" => Self::WsSend,
"ws_receive" => Self::WsReceive,
"ws_messages" => Self::WsMessages,
"ws_close" => Self::WsClose,
_ => return None,
})
}
}