Skip to main content

surrealdb_core/rpc/
method.rs

1#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, PartialOrd, Ord)]
2#[non_exhaustive]
3pub enum Method {
4	Unknown,
5	Ping,
6	Info,
7	Use,
8	Signup,
9	Signin,
10	Authenticate,
11	Refresh,
12	Invalidate,
13	Revoke,
14	Reset,
15	Kill,
16	Live,
17	Set,
18	Unset,
19	Select,
20	Insert,
21	Create,
22	Upsert,
23	Update,
24	Merge,
25	Patch,
26	Delete,
27	Version,
28	Query,
29	Relate,
30	Run,
31	InsertRelation,
32	Attach,
33	Sessions,
34	Detach,
35	Begin,
36	Commit,
37	Cancel,
38}
39
40impl Method {
41	/// Parse a [Method] from a [str] with any case
42	pub fn parse_case_insensitive<S>(s: S) -> Self
43	where
44		S: AsRef<str>,
45	{
46		Self::parse(s.as_ref().to_ascii_lowercase().as_str())
47	}
48
49	/// Parse a [Method] from a [str] in lower case
50	pub fn parse_case_sensitive<S>(s: S) -> Self
51	where
52		S: AsRef<str>,
53	{
54		Self::parse(s.as_ref())
55	}
56
57	/// Parse a [Method] from a [str]
58	fn parse<S>(s: S) -> Self
59	where
60		S: AsRef<str>,
61	{
62		match s.as_ref() {
63			"ping" => Self::Ping,
64			"info" => Self::Info,
65			"use" => Self::Use,
66			"signup" => Self::Signup,
67			"signin" => Self::Signin,
68			"authenticate" => Self::Authenticate,
69			"refresh" => Self::Refresh,
70			"invalidate" => Self::Invalidate,
71			"revoke" => Self::Revoke,
72			"reset" => Self::Reset,
73			"kill" => Self::Kill,
74			"live" => Self::Live,
75			"set" | "let" => Self::Set,
76			"unset" => Self::Unset,
77			"select" => Self::Select,
78			"insert" => Self::Insert,
79			"create" => Self::Create,
80			"upsert" => Self::Upsert,
81			"update" => Self::Update,
82			"merge" => Self::Merge,
83			"patch" => Self::Patch,
84			"delete" => Self::Delete,
85			"version" => Self::Version,
86			"query" => Self::Query,
87			"relate" => Self::Relate,
88			"run" => Self::Run,
89			"insert_relation" => Self::InsertRelation,
90			"attach" => Self::Attach,
91			"sessions" => Self::Sessions,
92			"detach" => Self::Detach,
93			"begin" => Self::Begin,
94			"commit" => Self::Commit,
95			"cancel" => Self::Cancel,
96			_ => Self::Unknown,
97		}
98	}
99}
100
101impl Method {
102	pub fn to_str(&self) -> &str {
103		match self {
104			Self::Unknown => "unknown",
105			Self::Ping => "ping",
106			Self::Info => "info",
107			Self::Use => "use",
108			Self::Signup => "signup",
109			Self::Signin => "signin",
110			Self::Authenticate => "authenticate",
111			Self::Refresh => "refresh",
112			Self::Invalidate => "invalidate",
113			Self::Revoke => "revoke",
114			Self::Reset => "reset",
115			Self::Kill => "kill",
116			Self::Live => "live",
117			Self::Set => "set",
118			Self::Unset => "unset",
119			Self::Select => "select",
120			Self::Insert => "insert",
121			Self::Create => "create",
122			Self::Upsert => "upsert",
123			Self::Update => "update",
124			Self::Merge => "merge",
125			Self::Patch => "patch",
126			Self::Delete => "delete",
127			Self::Version => "version",
128			Self::Query => "query",
129			Self::Relate => "relate",
130			Self::Run => "run",
131			Self::InsertRelation => "insert_relation",
132			Self::Attach => "attach",
133			Self::Sessions => "sessions",
134			Self::Detach => "detach",
135			Self::Begin => "begin",
136			Self::Commit => "commit",
137			Self::Cancel => "cancel",
138		}
139	}
140}
141
142impl std::fmt::Display for Method {
143	fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
144		write!(f, "{}", self.to_str())
145	}
146}
147
148impl Method {
149	/// Checks if the provided method is a valid and supported RPC method
150	pub fn is_valid(&self) -> bool {
151		!matches!(self, Self::Unknown)
152	}
153}