vtse/vtse-server/src/operations.rs

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()
}
)
}
}