@@ -74,10 +74,14 @@ fn production_and_embedded_http_sources_have_no_map_transport() {
7474 ) ;
7575}
7676
77- fn assert_rejected ( source : & str ) {
77+ fn assert_rejected ( source : & str ) -> String {
7878 match AgentRunner :: from_source ( source, AgentConfig :: default ( ) ) {
7979 Ok ( _) => panic ! ( "invalid resource call compiled: {source}" ) ,
80- Err ( error) => assert ! ( !error. to_string( ) . is_empty( ) , "empty compile diagnostic" ) ,
80+ Err ( error) => {
81+ let diagnostic = error. to_string ( ) ;
82+ assert ! ( !diagnostic. is_empty( ) , "empty compile diagnostic" ) ;
83+ diagnostic
84+ }
8185 }
8286}
8387
@@ -192,15 +196,29 @@ fn wrong_resource_key_fails_at_compile_time() {
192196#[ test]
193197fn request_cannot_be_used_after_send ( ) {
194198 assert_resource_api_available ( ) ;
195- assert_rejected (
199+ AgentRunner :: from_source (
196200 r#"use http;
197201 pub fn run(input: map) -> int {
198- let request = http::request::new("GET", "https://example.com/");
202+ let mut request = http::request::new("GET", "https://example.com/");
203+ http::request::set_header(&mut request, "x-test", "late");
204+ 0;
205+ }"# ,
206+ AgentConfig :: default ( ) ,
207+ )
208+ . expect ( "the same mutable borrow must compile before the request is sent" ) ;
209+ let diagnostic = assert_rejected (
210+ r#"use http;
211+ pub fn run(input: map) -> int {
212+ let mut request = http::request::new("GET", "https://example.com/");
199213 let response = http::client::request(request);
200- http::request::set_header(&request, "x-test", "late");
214+ http::request::set_header(&mut request, "x-test", "late");
201215 0;
202216 }"# ,
203217 ) ;
218+ assert ! (
219+ diagnostic. contains( "local 'request' was moved earlier" ) ,
220+ "expected ownership diagnostic, got {diagnostic}"
221+ ) ;
204222}
205223
206224#[ test]
0 commit comments