diff options
Diffstat (limited to 'rs/server/src')
| -rw-r--r-- | rs/server/src/main.rs | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/rs/server/src/main.rs b/rs/server/src/main.rs index cbac138..a8c6aa5 100644 --- a/rs/server/src/main.rs +++ b/rs/server/src/main.rs | |||
| @@ -236,12 +236,16 @@ async fn main() -> ExitCode { | |||
| 236 | enum TransferAdapter { | 236 | enum TransferAdapter { |
| 237 | #[serde(rename = "basic")] | 237 | #[serde(rename = "basic")] |
| 238 | Basic, | 238 | Basic, |
| 239 | #[serde(other)] | ||
| 240 | Unknown, | ||
| 239 | } | 241 | } |
| 240 | 242 | ||
| 241 | #[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone, Copy)] | 243 | #[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone, Copy)] |
| 242 | enum HashAlgo { | 244 | enum HashAlgo { |
| 243 | #[serde(rename = "sha256")] | 245 | #[serde(rename = "sha256")] |
| 244 | Sha256, | 246 | Sha256, |
| 247 | #[serde(other)] | ||
| 248 | Unknown, | ||
| 245 | } | 249 | } |
| 246 | 250 | ||
| 247 | impl Default for HashAlgo { | 251 | impl Default for HashAlgo { |
| @@ -250,7 +254,7 @@ impl Default for HashAlgo { | |||
| 250 | } | 254 | } |
| 251 | } | 255 | } |
| 252 | 256 | ||
| 253 | #[derive(Debug, Deserialize, Clone)] | 257 | #[derive(Debug, Deserialize, PartialEq, Eq, Clone)] |
| 254 | struct BatchRequestObject { | 258 | struct BatchRequestObject { |
| 255 | oid: common::Oid, | 259 | oid: common::Oid, |
| 256 | size: i64, | 260 | size: i64, |
| @@ -265,7 +269,7 @@ fn default_transfers() -> Vec<TransferAdapter> { | |||
| 265 | vec![TransferAdapter::Basic] | 269 | vec![TransferAdapter::Basic] |
| 266 | } | 270 | } |
| 267 | 271 | ||
| 268 | #[derive(Deserialize)] | 272 | #[derive(Debug, Deserialize, PartialEq, Eq, Clone)] |
| 269 | struct BatchRequest { | 273 | struct BatchRequest { |
| 270 | operation: common::Operation, | 274 | operation: common::Operation, |
| 271 | #[serde(default = "default_transfers")] | 275 | #[serde(default = "default_transfers")] |
| @@ -344,11 +348,10 @@ where | |||
| 344 | { | 348 | { |
| 345 | type Rejection = GitLfsJsonRejection; | 349 | type Rejection = GitLfsJsonRejection; |
| 346 | 350 | ||
| 347 | async fn from_request(mut req: Request, state: &S) -> Result<Self, Self::Rejection> { | 351 | async fn from_request(req: Request, state: &S) -> Result<Self, Self::Rejection> { |
| 348 | if !has_git_lfs_json_content_type(&req) { | 352 | if !has_git_lfs_json_content_type(&req) { |
| 349 | return Err(GitLfsJsonRejection::MissingGitLfsJsonContentType); | 353 | return Err(GitLfsJsonRejection::MissingGitLfsJsonContentType); |
| 350 | } | 354 | } |
| 351 | req.headers_mut().insert(header::CONTENT_TYPE, HeaderValue::from_static("application/json")); | ||
| 352 | Json::<T>::from_request(req, state) | 355 | Json::<T>::from_request(req, state) |
| 353 | .await | 356 | .await |
| 354 | .map(GitLfsJson) | 357 | .map(GitLfsJson) |
| @@ -964,3 +967,28 @@ fn test_mimetype() { | |||
| 964 | "application/vnd.git-lfs+json; charset=ISO-8859-1" | 967 | "application/vnd.git-lfs+json; charset=ISO-8859-1" |
| 965 | )); | 968 | )); |
| 966 | } | 969 | } |
| 970 | |||
| 971 | #[test] | ||
| 972 | fn test_deserialize() { | ||
| 973 | let json = r#"{"operation":"upload","objects":[{"oid":"8f4123f9a7181f488c5e111d82cefd992e461ae5df01fd2254399e6e670b2d3c","size":170904}], | ||
| 974 | "transfers":["lfs-standalone-file","basic","ssh"],"ref":{"name":"refs/heads/main"},"hash_algo":"sha256"}"#; | ||
| 975 | let expected = BatchRequest { | ||
| 976 | operation: common::Operation::Upload, | ||
| 977 | objects: vec![BatchRequestObject { | ||
| 978 | oid: "8f4123f9a7181f488c5e111d82cefd992e461ae5df01fd2254399e6e670b2d3c" | ||
| 979 | .parse() | ||
| 980 | .unwrap(), | ||
| 981 | size: 170904, | ||
| 982 | }], | ||
| 983 | transfers: vec![ | ||
| 984 | TransferAdapter::Unknown, | ||
| 985 | TransferAdapter::Basic, | ||
| 986 | TransferAdapter::Unknown, | ||
| 987 | ], | ||
| 988 | hash_algo: HashAlgo::Sha256, | ||
| 989 | }; | ||
| 990 | assert_eq!( | ||
| 991 | serde_json::from_str::<BatchRequest>(json).unwrap(), | ||
| 992 | expected | ||
| 993 | ); | ||
| 994 | } | ||