Skip to main content

surrealdb_sql/
tokenizer.rs

1use std::fmt;
2use std::fmt::Display;
3
4use surrealdb_types::{SqlFormat, ToSql, write_sql};
5
6#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]
7#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
8pub enum Tokenizer {
9	Blank,
10	Camel,
11	Class,
12	Punct,
13}
14
15impl Display for Tokenizer {
16	fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
17		f.write_str(match self {
18			Self::Blank => "BLANK",
19			Self::Camel => "CAMEL",
20			Self::Class => "CLASS",
21			Self::Punct => "PUNCT",
22		})
23	}
24}
25
26impl ToSql for Tokenizer {
27	fn fmt_sql(&self, f: &mut String, sql_fmt: SqlFormat) {
28		write_sql!(
29			f,
30			sql_fmt,
31			"{}",
32			match self {
33				Self::Blank => "BLANK",
34				Self::Camel => "CAMEL",
35				Self::Class => "CLASS",
36				Self::Punct => "PUNCT",
37			}
38		)
39	}
40}
41
42/// Writes tokenizer keywords separated by commas (no spaces), as in `TOKENIZERS BLANK,CAMEL`.
43pub fn write_tokenizers_sql<I>(f: &mut String, sql_fmt: SqlFormat, tokenizers: I)
44where
45	I: IntoIterator<Item = Tokenizer>,
46{
47	for (i, t) in tokenizers.into_iter().enumerate() {
48		if i > 0 {
49			f.push(',');
50		}
51		t.fmt_sql(f, sql_fmt);
52	}
53}