1
1
#[ allow( static_mut_refs) ]
2
2
mod bindings;
3
3
4
- use golem_rust:: atomically;
5
4
use crate :: bindings:: exports:: test:: web_search_exports:: test_web_search_api:: * ;
6
5
use crate :: bindings:: golem:: web_search:: web_search;
7
6
use crate :: bindings:: test:: helper_client:: test_helper_client:: TestHelperApi ;
7
+ use golem_rust:: atomically;
8
8
9
9
struct Component ;
10
10
11
11
impl Guest for Component {
12
12
/// test1 demonstrates a simple web search query
13
13
fn test1 ( ) -> String {
14
- let config = web_search:: Config {
15
- provider : "google" . to_string ( ) ,
16
- provider_options : vec ! [ ] ,
14
+ let params = web_search:: SearchParams {
15
+ query : "Rust programming language" . to_string ( ) ,
16
+ safe_search : None ,
17
+ language : None ,
18
+ region : None ,
19
+ max_results : Some ( 10 ) ,
20
+ time_range : None ,
21
+ include_domains : None ,
22
+ exclude_domains : None ,
23
+ include_images : None ,
24
+ include_html : None ,
25
+ advanced_answer : None ,
17
26
} ;
18
27
19
28
println ! ( "Sending web search request..." ) ;
20
- let response = web_search:: search (
21
- "Rust programming language" ,
22
- & config,
23
- ) ;
29
+ let response = web_search:: search_once ( & params) ;
24
30
println ! ( "Response: {:?}" , response) ;
25
31
26
32
match response {
27
- Ok ( results) => {
33
+ Ok ( ( results, metadata ) ) => {
28
34
format ! (
29
- "Found {} results. First result: { }" ,
35
+ "Found {} results.\n Results: {:?} \n Metadata: {:? }" ,
30
36
results. len( ) ,
31
- results. first( )
32
- . map( |r| format!( "{} - {}" , r. title, r. url) )
33
- . unwrap_or( "No results" . to_string( ) )
37
+ results,
38
+ metadata
34
39
)
35
40
}
36
41
Err ( error) => {
37
- format ! (
38
- "ERROR: {}" ,
39
- error
40
- )
42
+ format ! ( "ERROR: {:?}" , error)
41
43
}
42
44
}
43
45
}
44
46
45
47
/// test2 demonstrates a more complex web search query with multiple terms
46
48
fn test2 ( ) -> String {
47
- let config = web_search:: Config {
48
- provider : "google" . to_string ( ) ,
49
- provider_options : vec ! [ ] ,
49
+ let params = web_search:: SearchParams {
50
+ query : "WebAssembly WASI components tutorial" . to_string ( ) ,
51
+ safe_search : None ,
52
+ language : None ,
53
+ region : None ,
54
+ max_results : Some ( 5 ) ,
55
+ time_range : None ,
56
+ include_domains : None ,
57
+ exclude_domains : None ,
58
+ include_images : None ,
59
+ include_html : None ,
60
+ advanced_answer : None ,
50
61
} ;
51
62
52
63
println ! ( "Sending complex web search request..." ) ;
53
- let response = web_search:: search (
54
- "WebAssembly WASI components tutorial" ,
55
- & config,
56
- ) ;
64
+ let response = web_search:: search_once ( & params) ;
57
65
println ! ( "Response: {:?}" , response) ;
58
66
59
67
match response {
60
- Ok ( results) => {
61
- let mut output = format ! ( "Found {} results:\n " , results. len( ) ) ;
62
- for ( i, result) in results. iter ( ) . take ( 3 ) . enumerate ( ) {
63
- output. push_str ( & format ! (
64
- "{}. {} - {} ({})\n " ,
65
- i + 1 ,
66
- result. title,
67
- result. url,
68
- result. snippet. as_deref( ) . unwrap_or( "No snippet" )
69
- ) ) ;
70
- }
71
- output
68
+ Ok ( ( results, metadata) ) => {
69
+ format ! (
70
+ "Found {} results.\n Results: {:?}\n Metadata: {:?}" ,
71
+ results. len( ) ,
72
+ results,
73
+ metadata
74
+ )
72
75
}
73
76
Err ( error) => {
74
- format ! ( "ERROR: {}" , error)
77
+ format ! ( "ERROR: {:? }" , error)
75
78
}
76
79
}
77
80
}
78
81
79
82
/// test3 demonstrates error handling with an invalid search query
80
83
fn test3 ( ) -> String {
81
- let config = web_search:: Config {
82
- provider : "google" . to_string ( ) ,
83
- provider_options : vec ! [ ] ,
84
+ let params = web_search:: SearchParams {
85
+ query : "" . to_string ( ) ,
86
+ safe_search : None ,
87
+ language : None ,
88
+ region : None ,
89
+ max_results : Some ( 10 ) ,
90
+ time_range : None ,
91
+ include_domains : None ,
92
+ exclude_domains : None ,
93
+ include_images : None ,
94
+ include_html : None ,
95
+ advanced_answer : None ,
84
96
} ;
85
97
86
98
println ! ( "Sending empty web search request..." ) ;
87
- let response = web_search:: search ( "" , & config ) ;
99
+ let response = web_search:: search_once ( & params ) ;
88
100
println ! ( "Response: {:?}" , response) ;
89
101
90
102
match response {
91
- Ok ( results) => {
103
+ Ok ( ( results, _metadata ) ) => {
92
104
format ! ( "Unexpected success with {} results" , results. len( ) )
93
105
}
94
106
Err ( error) => {
95
- format ! ( "Expected error: {}" , error)
107
+ format ! ( "Expected error: {:? }" , error)
96
108
}
97
109
}
98
110
}
99
111
100
112
/// test4 simulates a crash during a web search, but only first time.
101
113
/// after the automatic recovery it will continue and finish the request successfully.
102
114
fn test4 ( ) -> String {
103
- let config = web_search:: Config {
104
- provider : "google" . to_string ( ) ,
105
- provider_options : vec ! [ ] ,
115
+ let params = web_search:: SearchParams {
116
+ query : "Golem cloud WebAssembly components" . to_string ( ) ,
117
+ safe_search : None ,
118
+ language : None ,
119
+ region : None ,
120
+ max_results : Some ( 10 ) ,
121
+ time_range : None ,
122
+ include_domains : None ,
123
+ exclude_domains : None ,
124
+ include_images : None ,
125
+ include_html : None ,
126
+ advanced_answer : None ,
106
127
} ;
107
128
108
129
let name = std:: env:: var ( "GOLEM_WORKER_NAME" ) . unwrap ( ) ;
109
-
130
+
110
131
atomically ( || {
111
132
let client = TestHelperApi :: new ( & name) ;
112
133
let counter = client. blocking_inc_and_get ( ) ;
@@ -116,27 +137,23 @@ impl Guest for Component {
116
137
} ) ;
117
138
118
139
println ! ( "Sending web search request after recovery..." ) ;
119
- let response = web_search:: search (
120
- "Golem cloud WebAssembly components" ,
121
- & config,
122
- ) ;
140
+ let response = web_search:: search_once ( & params) ;
123
141
println ! ( "Response: {:?}" , response) ;
124
142
125
143
match response {
126
- Ok ( results) => {
144
+ Ok ( ( results, metadata ) ) => {
127
145
format ! (
128
- "Recovery successful! Found {} results. First: { }" ,
146
+ "Found {} results.\n Results: {:?} \n Metadata: {:? }" ,
129
147
results. len( ) ,
130
- results. first( )
131
- . map( |r| format!( "{} - {}" , r. title, r. url) )
132
- . unwrap_or( "No results" . to_string( ) )
148
+ results,
149
+ metadata
133
150
)
134
151
}
135
152
Err ( error) => {
136
- format ! ( "ERROR after recovery: {}" , error)
153
+ format ! ( "ERROR after recovery: {:? }" , error)
137
154
}
138
155
}
139
156
}
140
157
}
141
158
142
- bindings:: export!( Component with_types_in bindings) ;
159
+ bindings:: export!( Component with_types_in bindings) ;
0 commit comments