Skip to main content

kdb_connection/queries/
krql.rs

1//! Convenient API for creating krQL queries
2
3use serde::Serialize;
4use serde_with::skip_serializing_none;
5
6use kdb_macros::KRQLQuery;
7
8pub mod agents;
9pub mod datasets;
10mod sensing;
11
12#[allow(unused)] // False positive KRQLQuery is needed for `kdb_macros::KRQLQuery` to work
13pub(crate) trait KRQLQuery: Serialize {}
14
15/// Test query
16#[derive(Clone, Default, KRQLQuery)]
17pub struct Test
18{
19    /// A string to print by the kDB Server
20    pub print: Option<crate::value::Value>,
21    /// A value returned
22    #[serde(rename = "return")]
23    pub return_value: Option<crate::value::Value>,
24}
25
26#[cfg(test)]
27mod tests
28{
29    use super::*;
30
31    #[test]
32    fn test_query()
33    {
34        let t = Test {
35            print: Some("Hello".into()),
36            ..Default::default()
37        };
38        assert_eq!(
39            serde_saphyr::to_string(&t).unwrap(),
40            r#"test:
41  print:
42    type: literal
43    datatype: "http://www.w3.org/2001/XMLSchema#string"
44    value: Hello
45"#
46        );
47        let t = Test {
48            return_value: Some("world".to_string().into()),
49            ..Default::default()
50        };
51        assert_eq!(
52            serde_saphyr::to_string(&t).unwrap(),
53            r#"test:
54  return:
55    type: literal
56    datatype: "http://www.w3.org/2001/XMLSchema#string"
57    value: world
58"#
59        );
60    }
61}