surrealdb_sql/
table.rs

1use crate::{escape::escape_ident, fmt::Fmt, strand::no_nul_bytes, Id, Ident, Thing};
2use revision::revisioned;
3use serde::{Deserialize, Serialize};
4use std::fmt::{self, Display, Formatter};
5use std::ops::Deref;
6use std::str;
7
8pub(crate) const TOKEN: &str = "$surrealdb::private::crate::Table";
9
10#[derive(Clone, Debug, Default, Eq, PartialEq, PartialOrd, Serialize, Deserialize, Hash)]
11#[revisioned(revision = 1)]
12pub struct Tables(pub Vec<Table>);
13
14impl From<Table> for Tables {
15	fn from(v: Table) -> Self {
16		Tables(vec![v])
17	}
18}
19
20impl Deref for Tables {
21	type Target = Vec<Table>;
22	fn deref(&self) -> &Self::Target {
23		&self.0
24	}
25}
26
27impl Display for Tables {
28	fn fmt(&self, f: &mut Formatter) -> fmt::Result {
29		Display::fmt(&Fmt::comma_separated(&self.0), f)
30	}
31}
32
33#[derive(Clone, Debug, Default, Eq, PartialEq, PartialOrd, Serialize, Deserialize, Hash)]
34#[serde(rename = "$surrealdb::private::crate::Table")]
35#[revisioned(revision = 1)]
36pub struct Table(#[serde(with = "no_nul_bytes")] pub String);
37
38impl From<String> for Table {
39	fn from(v: String) -> Self {
40		Self(v)
41	}
42}
43
44impl From<&str> for Table {
45	fn from(v: &str) -> Self {
46		Self::from(String::from(v))
47	}
48}
49
50impl From<Ident> for Table {
51	fn from(v: Ident) -> Self {
52		Self(v.0)
53	}
54}
55
56impl Deref for Table {
57	type Target = String;
58	fn deref(&self) -> &Self::Target {
59		&self.0
60	}
61}
62
63impl Table {
64	pub fn generate(&self) -> Thing {
65		Thing {
66			tb: self.0.to_owned(),
67			id: Id::rand(),
68		}
69	}
70}
71
72impl Display for Table {
73	fn fmt(&self, f: &mut Formatter) -> fmt::Result {
74		Display::fmt(&escape_ident(&self.0), f)
75	}
76}