@@ -64,6 +64,10 @@ fn default_key_server_version_requirement() -> VersionReq {
6464 VersionReq :: parse ( ">=0.5.14" ) . expect ( "Failed to parse default key server version requirement" )
6565}
6666
67+ fn default_rust_sdk_version_requirement ( ) -> VersionReq {
68+ VersionReq :: parse ( ">=0.0.0" ) . expect ( "Failed to parse default Rust SDK version requirement" )
69+ }
70+
6771/// Configuration file format for aggregator server.
6872#[ derive( Clone , Deserialize ) ]
6973struct AggregatorOptions {
@@ -79,6 +83,10 @@ struct AggregatorOptions {
7983 #[ serde( default = "default_ts_sdk_version_requirement" ) ]
8084 ts_sdk_version_requirement : VersionReq ,
8185
86+ /// The minimum version of the SDK that is required to use this aggregator.
87+ #[ serde( default = "default_rust_sdk_version_requirement" ) ]
88+ rust_sdk_version_requirement : VersionReq ,
89+
8290 /// The minimum version of the key server that is required by this aggregator.
8391 #[ serde( default = "default_key_server_version_requirement" ) ]
8492 key_server_version_requirement : VersionReq ,
@@ -112,16 +120,20 @@ impl AppState {
112120 sdk_type : Option < & HeaderValue > ,
113121 ) -> Result < ( ) , InternalError > {
114122 let version = Version :: parse ( version) . map_err ( |_| InvalidSDKVersion ) ?;
115- let sdk_type = ClientSdkType :: from_header ( sdk_type. and_then ( |v| v. to_str ( ) . ok ( ) ) ) ;
123+ let sdk_type = ClientSdkType :: from_header ( sdk_type. and_then ( |v| v. to_str ( ) . ok ( ) ) ) ? ;
116124
117125 match sdk_type {
118126 ClientSdkType :: TypeScript => {
119127 if !self . options . ts_sdk_version_requirement . matches ( & version) {
120128 return Err ( DeprecatedSDKVersion ) ;
121129 }
122130 }
123- _ => {
124- // TODO: Add support for other SDK types.
131+ ClientSdkType :: Rust => {
132+ if !self . options . rust_sdk_version_requirement . matches ( & version) {
133+ return Err ( DeprecatedSDKVersion ) ;
134+ }
135+ }
136+ ClientSdkType :: Aggregator => {
125137 return Err ( InvalidSDKType ) ;
126138 }
127139 }
@@ -570,6 +582,7 @@ mod tests {
570582 node_url : None ,
571583 key_server_object_id : Address :: from ( [ 0u8 ; 32 ] ) ,
572584 ts_sdk_version_requirement : VersionReq :: parse ( ">=0.9.0" ) . unwrap ( ) ,
585+ rust_sdk_version_requirement : VersionReq :: parse ( ">=0.0.0" ) . unwrap ( ) ,
573586 key_server_version_requirement : VersionReq :: parse ( ">=0.5.14" ) . unwrap ( ) ,
574587 } ;
575588 let grpc_client = SuiGrpcClient :: new ( options. node_url ( ) ) . unwrap ( ) ;
@@ -607,6 +620,7 @@ mod tests {
607620 let ( request, _, _) = create_test_fetch_key_request ( & mut thread_rng ( ) ) ;
608621
609622 let mut headers = HeaderMap :: new ( ) ;
623+ headers. insert ( HEADER_CLIENT_SDK_TYPE , "typescript" . parse ( ) . unwrap ( ) ) ;
610624 headers. insert ( HEADER_CLIENT_SDK_VERSION , "0.3.0" . parse ( ) . unwrap ( ) ) ; // Too old
611625 let result = handle_fetch_key ( State ( state) , headers, Json ( request) ) . await ;
612626
@@ -638,6 +652,7 @@ mod tests {
638652 let ( request, _, _) = create_test_fetch_key_request ( & mut thread_rng ( ) ) ;
639653
640654 let mut headers = HeaderMap :: new ( ) ;
655+ headers. insert ( HEADER_CLIENT_SDK_TYPE , "typescript" . parse ( ) . unwrap ( ) ) ;
641656 headers. insert ( HEADER_CLIENT_SDK_VERSION , "0.9.6" . parse ( ) . unwrap ( ) ) ;
642657 let result = handle_fetch_key ( State ( state) , headers, Json ( request) ) . await ;
643658
@@ -669,6 +684,7 @@ mod tests {
669684 let ( request, _, _) = create_test_fetch_key_request ( & mut thread_rng ( ) ) ;
670685
671686 let mut headers = HeaderMap :: new ( ) ;
687+ headers. insert ( HEADER_CLIENT_SDK_TYPE , "typescript" . parse ( ) . unwrap ( ) ) ;
672688 headers. insert ( HEADER_CLIENT_SDK_VERSION , "0.9.6" . parse ( ) . unwrap ( ) ) ;
673689 let result = handle_fetch_key ( State ( state) , headers, Json ( request) ) . await ;
674690 let response = result. unwrap ( ) . into_response ( ) ;
@@ -732,6 +748,7 @@ mod tests {
732748
733749 // Call handle_fetch_key and check majority error.
734750 let mut headers = HeaderMap :: new ( ) ;
751+ headers. insert ( HEADER_CLIENT_SDK_TYPE , "typescript" . parse ( ) . unwrap ( ) ) ;
735752 headers. insert ( HEADER_CLIENT_SDK_VERSION , "0.9.6" . parse ( ) . unwrap ( ) ) ;
736753 let result = handle_fetch_key ( State ( state) , headers, Json ( request) ) . await ;
737754 match result {
0 commit comments