1
+ use std:: marker:: PhantomData ;
2
+
1
3
use crate :: headers:: from_headers:: * ;
2
4
use crate :: prelude:: * ;
3
5
use crate :: resources:: stored_procedure:: Parameters ;
@@ -10,18 +12,19 @@ use chrono::{DateTime, Utc};
10
12
use serde:: de:: DeserializeOwned ;
11
13
12
14
#[ derive( Debug , Clone ) ]
13
- pub struct ExecuteStoredProcedureBuilder {
15
+ pub struct ExecuteStoredProcedureBuilder < T > {
14
16
client : StoredProcedureClient ,
15
17
parameters : Option < Parameters > ,
16
18
consistency_level : Option < ConsistencyLevel > ,
17
19
allow_tentative_writes : TentativeWritesAllowance ,
18
20
partition_key : Option < String > ,
19
21
context : Context ,
22
+ _stored_proc : PhantomData < T > ,
20
23
}
21
24
22
25
static EMPTY_LIST : & [ u8 ; 2 ] = b"[]" ;
23
26
24
- impl ExecuteStoredProcedureBuilder {
27
+ impl < T : DeserializeOwned + Send > ExecuteStoredProcedureBuilder < T > {
25
28
pub ( crate ) fn new ( client : StoredProcedureClient ) -> Self {
26
29
Self {
27
30
client,
@@ -30,6 +33,7 @@ impl ExecuteStoredProcedureBuilder {
30
33
allow_tentative_writes : TentativeWritesAllowance :: Deny ,
31
34
partition_key : None ,
32
35
context : Context :: new ( ) ,
36
+ _stored_proc : PhantomData ,
33
37
}
34
38
}
35
39
@@ -47,10 +51,7 @@ impl ExecuteStoredProcedureBuilder {
47
51
} )
48
52
}
49
53
50
- pub fn into_future < T > ( self ) -> ExecuteStoredProcedure < T >
51
- where
52
- T : DeserializeOwned ,
53
- {
54
+ pub fn into_future ( self ) -> ExecuteStoredProcedure < T > {
54
55
Box :: pin ( async move {
55
56
let mut request = self . client . stored_procedure_request ( http:: Method :: POST ) ;
56
57
@@ -90,6 +91,14 @@ impl ExecuteStoredProcedureBuilder {
90
91
pub type ExecuteStoredProcedure < T > =
91
92
futures:: future:: BoxFuture < ' static , azure_core:: Result < ExecuteStoredProcedureResponse < T > > > ;
92
93
94
+ #[ cfg( feature = "into_future" ) ]
95
+ impl < T : DeserializeOwned + Send > std:: future:: IntoFuture for ExecuteStoredProcedureBuilder < T > {
96
+ type IntoFuture = ExecuteStoredProcedure < T > ;
97
+ type Output = <ExecuteStoredProcedure < T > as std:: future:: Future >:: Output ;
98
+ fn into_future ( self ) -> Self :: IntoFuture {
99
+ Self :: into_future ( self )
100
+ }
101
+ }
93
102
#[ derive( Debug , Clone ) ]
94
103
pub struct ExecuteStoredProcedureResponse < T >
95
104
where
0 commit comments