| 489 | let slug = slugify(&meta.name); |
| 490 | if slug.is_empty() || size == 0 { |
| 491 | let _ = self.store.delete(&temp).await; |
| 492 | if slug.is_empty() { |
| 493 | bail!( |
| 494 | "mod name '{}' has no usable characters for an id", |
| 495 | meta.name |
| 496 | ); |
| 497 | } |
| 498 | bail!("mod artifact is empty"); |
| 499 | } |
| 500 | |
| 501 | if self.get_mod(&slug).await?.is_some() { |
| 502 | let _ = self.store.delete(&temp).await; |
| 503 | bail!("mod id '{slug}' already exists"); |
| 504 | } |
| 505 | |
| 506 | let digest = hasher.finalize(); |
| 507 | let version = match meta.version.as_deref() { |
| 508 | Some(value) => match sanitize_version(value) { |
| 509 | Some(version) => version, |
| 510 | None => { |
| 511 | let _ = self.store.delete(&temp).await; |
| 512 | bail!("invalid version '{value}'"); |
| 513 | } |
| 514 | }, |
| 515 | None => digest.iter().take(4).map(|b| format!("{b:02x}")).collect(), |
| 516 | }; |
| 517 | |
| 518 | let artifact_path = self.store_path(Self::revision_artifact_path(&slug, 1)); |
| 519 | self.place_temp_if_absent(&temp, &artifact_path) |