haematite_cli/serve/query/
check.rs1use serde::{Deserialize, Serialize};
4use serde_json::{Value, json};
5
6use super::{parser, words as vocabulary};
7use crate::serve::storage::Failure;
8
9#[derive(Debug, Serialize, Deserialize)]
10#[serde(deny_unknown_fields)]
11pub struct CheckRequest {
12 pub query: String,
13}
14
15#[derive(Debug, Serialize, Deserialize)]
16#[serde(deny_unknown_fields)]
17pub struct WordsRequest {}
18
19#[must_use]
20pub fn check(request: &CheckRequest) -> Value {
21 let mut stages = Vec::new();
22 let parsed = parser::pipeline_with(&request.query, |word, span| {
23 stages.push(json!({"word": word, "span": {"start": span.start, "end": span.end}}));
24 });
25 let refusal = parsed.err().map(|refused| {
26 let span = refused.span();
27 json!({
28 "code": refused.code(),
29 "message": refused.to_string(),
30 "span": {"start": span.start, "end": span.end}
31 })
32 });
33 json!({"stages": stages, "refusal": refusal})
34}
35
36pub fn words(request: &WordsRequest) -> Result<Value, Failure> {
41 let WordsRequest {} = request;
42 serde_json::to_value(vocabulary::WORDS).map_err(Failure::storage)
43}