Added isolang as a message field.

This commit is contained in:
Jeff Baskin 2025-05-20 12:56:59 -04:00
parent ac0df7ae1f
commit 2c9b08c77d
4 changed files with 108 additions and 1 deletions

34
Cargo.lock generated
View File

@ -472,6 +472,15 @@ version = "1.70.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
[[package]]
name = "isolang"
version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fe50d48c77760c55188549098b9a7f6e37ae980c586a24693d6b01c3b2010c3c"
dependencies = [
"phf",
]
[[package]] [[package]]
name = "itoa" name = "itoa"
version = "1.0.15" version = "1.0.15"
@ -556,6 +565,7 @@ dependencies = [
"chrono", "chrono",
"clap", "clap",
"http-body-util", "http-body-util",
"isolang",
"serde_json", "serde_json",
"tokio", "tokio",
"tower", "tower",
@ -622,6 +632,24 @@ version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
[[package]]
name = "phf"
version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078"
dependencies = [
"phf_shared",
]
[[package]]
name = "phf_shared"
version = "0.11.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5"
dependencies = [
"siphasher",
]
[[package]] [[package]]
name = "pin-project-lite" name = "pin-project-lite"
version = "0.2.16" version = "0.2.16"
@ -766,6 +794,12 @@ dependencies = [
"libc", "libc",
] ]
[[package]]
name = "siphasher"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d"
[[package]] [[package]]
name = "slab" name = "slab"
version = "0.4.9" version = "0.4.9"

View File

@ -9,6 +9,7 @@ edition = "2021"
axum = ">=0.8.0" axum = ">=0.8.0"
chrono = { version = ">=0.4.40", features = ["now"] } chrono = { version = ">=0.4.40", features = ["now"] }
clap = { version = ">=4.5.1", features = ["derive"] } clap = { version = ">=4.5.1", features = ["derive"] }
isolang = ">=2.4.0"
serde_json = ">=1.0.140" serde_json = ">=1.0.140"
tokio = { version = ">=1.36.0", features = ["full"] } tokio = { version = ">=1.36.0", features = ["full"] }
tower-cookies = ">=0.11.0" tower-cookies = ">=0.11.0"

View File

@ -11,6 +11,27 @@ use std::{
const RESPONDS_TO: [MsgType; 1] = [MsgType::DocumentRequest]; const RESPONDS_TO: [MsgType; 1] = [MsgType::DocumentRequest];
struct Table;
impl Table {
fn new() -> Self {
Self {}
}
fn add_column(&self) {}
}
#[cfg(test)]
mod tables {
use super::*;
#[test]
fn create_table() {
let tbl = Table::new();
tbl.add_column();
}
}
pub struct Document { pub struct Document {
data: HashMap<String, String>, data: HashMap<String, String>,
queue: Queue, queue: Queue,

View File

@ -1,5 +1,6 @@
use crate::{ActionType, ErrorType}; use crate::{ActionType, ErrorType};
use chrono::prelude::*; use chrono::prelude::*;
use isolang::Language;
use std::fmt; use std::fmt;
use uuid::Uuid; use uuid::Uuid;
@ -17,6 +18,7 @@ pub enum Field {
Action(ActionType), Action(ActionType),
DateTime(DateTime<Utc>), DateTime(DateTime<Utc>),
ErrorType(ErrorType), ErrorType(ErrorType),
Lang(Language),
Static(String), Static(String),
Uuid(Uuid), Uuid(Uuid),
} }
@ -49,6 +51,13 @@ impl Field {
_ => Err("not an error type".to_string()), _ => Err("not an error type".to_string()),
} }
} }
pub fn to_language(&self) -> Result<Language, String> {
match self {
Field::Lang(data) => Ok(data.clone()),
_ => Err("not an error type".to_string()),
}
}
} }
impl From<String> for Field { impl From<String> for Field {
@ -95,6 +104,12 @@ impl From<ErrorType> for Field {
} }
} }
impl From<Language> for Field {
fn from(value: Language) -> Self {
Field::Lang(value)
}
}
impl fmt::Display for Field { impl fmt::Display for Field {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self { match self {
@ -296,4 +311,40 @@ mod fields {
Err(_) => {} Err(_) => {}
} }
} }
#[test]
fn from_lang_to_field() {
let langs = [
Language::from_639_1("en").unwrap(),
Language::from_639_1("ja").unwrap(),
];
for lang in langs.into_iter() {
let field: Field = lang.into();
match field {
Field::Lang(data) => assert_eq!(data, lang),
_ => unreachable!("should identify language"),
}
}
}
#[test]
fn from_field_to_lang() {
let langs = [
Language::from_639_1("en").unwrap(),
Language::from_639_1("ja").unwrap(),
];
for lang in langs.into_iter() {
let field: Field = lang.into();
assert_eq!(field.to_language().unwrap(), lang);
}
}
#[test]
fn wrong_field_to_lang() {
let field: Field = Uuid::nil().into();
match field.to_language() {
Ok(_) => unreachable!("should have produced an error"),
Err(_) => {}
}
}
} }