elasticsearch_dsl/search/script_fields/
mod.rs1use crate::Script;
8
9#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
11pub struct ScriptField {
12 script: Script,
13}
14
15impl From<Script> for ScriptField {
16 fn from(value: Script) -> Self {
17 Self { script: value }
18 }
19}
20
21impl From<&str> for ScriptField {
22 fn from(value: &str) -> Self {
23 Self {
24 script: Script::source(value),
25 }
26 }
27}
28
29impl From<String> for ScriptField {
30 fn from(value: String) -> Self {
31 Self {
32 script: Script::source(value),
33 }
34 }
35}
36
37#[cfg(test)]
38mod tests {
39 use crate::{util::assert_serialize, Search};
40
41 use super::*;
42
43 #[test]
44 fn serializes_correctly() {
45 let subject = Search::new()
46 .script_fields(
47 "test1",
48 Script::source("doc['price'].value * 2").lang("painless"),
49 )
50 .script_fields(
51 "test2",
52 Script::source("doc['price'].value * params.factor")
53 .lang("painless")
54 .param("factor", 2.0),
55 )
56 .script_fields("test3", "params['_source']['message']");
57
58 let expectation = json!({
59 "script_fields": {
60 "test1": {
61 "script": {
62 "lang": "painless",
63 "source": "doc['price'].value * 2"
64 }
65 },
66 "test2": {
67 "script": {
68 "lang": "painless",
69 "source": "doc['price'].value * params.factor",
70 "params": {
71 "factor": 2.0
72 }
73 }
74 },
75 "test3": {
76 "script": {
77 "source": "params['_source']['message']"
78 }
79 }
80 }
81 });
82
83 assert_serialize(subject, expectation);
84 }
85}