opensearch_dsl/search/script_fields/
mod.rs1use crate::Script;
8
9#[derive(Debug, Clone, PartialEq, Eq, Deserialize, 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 super::*;
40 use crate::{util::assert_serialize, Search};
41
42 #[test]
43 fn serializes_correctly() {
44 let subject = Search::new()
45 .script_fields(
46 "test1",
47 Script::source("doc['price'].value * 2").lang("painless"),
48 )
49 .script_fields(
50 "test2",
51 Script::source("doc['price'].value * params.factor")
52 .lang("painless")
53 .param("factor", 2.0),
54 )
55 .script_fields("test3", "params['_source']['message']");
56
57 let expectation = json!({
58 "script_fields": {
59 "test1": {
60 "script": {
61 "lang": "painless",
62 "source": "doc['price'].value * 2"
63 }
64 },
65 "test2": {
66 "script": {
67 "lang": "painless",
68 "source": "doc['price'].value * params.factor",
69 "params": {
70 "factor": 2.0
71 }
72 }
73 },
74 "test3": {
75 "script": {
76 "source": "params['_source']['message']"
77 }
78 }
79 }
80 });
81
82 assert_serialize(subject, expectation);
83 }
84}