Skip to main content

ferro_maven_layout/
lib.rs

1// SPDX-License-Identifier: Apache-2.0
2//! `ferro-maven-layout`
3//!
4//! Maven 2/3 repository layout, POM (`pom.xml`) parsing, `maven-metadata.xml`
5//! generation, and SNAPSHOT artifact timestamping for FerroRepo.
6//!
7//! ## Spec references
8//!
9//! - Maven Repository Layout —
10//!   <https://maven.apache.org/repository/layout.html>
11//! - Remote / Local Repository —
12//!   <https://maven.apache.org/ref/3.9.6/maven-repository-metadata/>
13//! - Snapshot metadata format —
14//!   <https://maven.apache.org/ref/3.9.6/maven-repository-metadata/repository-metadata.html>
15//!
16//! Phase 1 scope: full Maven Central wire compatibility covering
17//! `mvn deploy`, `mvn dependency:go-offline`, Gradle 8.x, and sbt clients, with
18//! `groupId:artifactId:version` GAV coordinates, `maven-metadata.xml` index
19//! files, checksum sidecars (`.md5`, `.sha1`, `.sha256`, `.sha512`), and POM
20//! path validation on `PUT`. GPG detached signatures (`.asc`) and Maven
21//! Central publisher staging validation land in Phase 2.
22
23#![deny(missing_docs)]
24
25pub mod checksum;
26pub mod coordinate;
27pub mod error;
28pub mod handlers;
29pub mod layout;
30pub mod metadata;
31pub mod pom;
32pub mod router;
33pub mod snapshot;
34
35pub use checksum::{ChecksumAlgo, compute_checksum, parse_sidecar};
36pub use coordinate::{Coordinate, CoordinateParseError};
37pub use error::MavenError;
38pub use layout::{LayoutPath, PathClass, parse_layout_path};
39pub use metadata::{MavenMetadata, Snapshot, SnapshotVersion};
40pub use pom::{Pom, PomParent, parse_pom};
41pub use router::{MavenState, router};
42pub use snapshot::{SnapshotTimestamp, is_snapshot_version};
43
44/// Crate name, exposed for diagnostics and `/metrics` labelling.
45pub const CRATE_NAME: &str = "ferro-maven-layout";
46
47#[cfg(test)]
48mod tests {
49    use super::CRATE_NAME;
50
51    #[test]
52    fn crate_name_is_stable() {
53        assert_eq!(CRATE_NAME, "ferro-maven-layout");
54    }
55}