57 lines
1.4 KiB
Rust
57 lines
1.4 KiB
Rust
use serde::Deserialize;
|
|
use vtse_common::stock::StockName;
|
|
|
|
#[derive(Deserialize, Debug, PartialEq)]
|
|
#[serde(untagged)]
|
|
pub(crate) enum ServerOperation {
|
|
Query(QueryOperation),
|
|
Meta(MetaOperation),
|
|
}
|
|
|
|
#[derive(Deserialize, Debug, PartialEq)]
|
|
#[serde(tag = "type", rename_all = "snake_case")]
|
|
pub(crate) enum QueryOperation {
|
|
StockInfo { stock: StockName },
|
|
}
|
|
|
|
#[derive(Deserialize, Debug, PartialEq)]
|
|
#[serde(tag = "type", rename_all = "snake_case")]
|
|
pub(crate) enum MetaOperation {
|
|
Register { username: String, password: String },
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod deserialize {
|
|
use super::*;
|
|
use serde_json::json;
|
|
use std::str::FromStr;
|
|
|
|
#[test]
|
|
fn server_op_is_transparent() {
|
|
assert_eq!(
|
|
serde_json::from_value::<ServerOperation>(json!({
|
|
"type": "stock_info",
|
|
"stock": "Gura",
|
|
}))
|
|
.unwrap(),
|
|
ServerOperation::Query(QueryOperation::StockInfo {
|
|
stock: StockName::from_str("Gura").unwrap()
|
|
})
|
|
)
|
|
}
|
|
|
|
#[test]
|
|
fn query_op() {
|
|
assert_eq!(
|
|
serde_json::from_value::<QueryOperation>(json!({
|
|
"type": "stock_info",
|
|
"stock": "Gura",
|
|
}))
|
|
.unwrap(),
|
|
QueryOperation::StockInfo {
|
|
stock: StockName::from_str("Gura").unwrap()
|
|
}
|
|
)
|
|
}
|
|
}
|