Module versioning

Module versioning 

Source
Expand description

§API Versioning Infrastructure

Production-grade API versioning system for SciRS2 Core providing semantic versioning, backward compatibility guarantees, and version negotiation capabilities for enterprise deployments and long-term API stability.

§Features

  • Semantic versioning (SemVer) compliance with custom extensions
  • Backward compatibility enforcement and validation
  • API version negotiation and client-server compatibility
  • Breaking change detection and migration assistance
  • Version deprecation management with transition periods
  • API evolution tracking and documentation generation
  • Enterprise-grade stability guarantees
  • Integration with CI/CD pipelines for automated compatibility testing

§Modules

  • semantic: Semantic versioning implementation with SciRS2 extensions
  • compatibility: Backward compatibility checking and enforcement
  • negotiation: Version negotiation between clients and servers
  • migration: Migration assistance for API upgrades
  • deprecation: Deprecation management and transition planning

§Example

use scirs2_core::versioning::{Version, VersionManager, CompatibilityLevel, ApiVersionBuilder, ClientCapabilities};

// Create version manager
let mut version_manager = VersionManager::new();

// Register API versions using the builder pattern
let v1_0_0 = ApiVersionBuilder::new(Version::parse("1.0.0")?)
    .new_feature("Initial API release")
    .build()?;
let v1_1_0 = ApiVersionBuilder::new(Version::parse("1.1.0")?)
    .new_feature("Added new computation methods")
    .build()?;
let v2_0_0 = ApiVersionBuilder::new(Version::parse("2.0.0")?)
    .breaking_change("Changed function signatures")
    .build()?;

version_manager.registerversion(v1_0_0.clone())?;
version_manager.registerversion(v1_1_0.clone())?;
version_manager.registerversion(v2_0_0.clone())?;

// Check compatibility
let compat = version_manager.check_compatibility(&v1_0_0.version, &v1_1_0.version)?;
assert_eq!(compat, CompatibilityLevel::BackwardCompatible);

// Negotiate version with client capabilities
let client_caps = ClientCapabilities::new("test_client".to_string(), Version::parse("1.0.5")?);
let negotiated = version_manager.negotiateversion(&client_caps)?;
assert!(negotiated.negotiated_version.major() >= 1);

Re-exports§

pub use compatibility::CompatibilityChecker;
pub use compatibility::CompatibilityLevel;
pub use compatibility::CompatibilityReport;
pub use deprecation::DeprecationManager;
pub use deprecation::DeprecationPolicy;
pub use deprecation::DeprecationStatus;
pub use migration::MigrationManager;
pub use migration::MigrationPlan;
pub use migration::MigrationStep;
pub use negotiation::ClientCapabilities;
pub use negotiation::NegotiationResult;
pub use negotiation::VersionNegotiator;
pub use semantic::Version;
pub use semantic::VersionBuilder;
pub use semantic::VersionConstraint;
pub use semantic::VersionRange;

Modules§

compatibility
Backward Compatibility Checking
deprecation
Deprecation Management
migration
Migration Management
negotiation
Version Negotiation
semantic
Semantic Versioning Implementation

Structs§

ApiVersion
API version information with metadata
ApiVersionBuilder
Builder for creating API versions
MaintenanceReport
Maintenance report for version management operations
VersionManager
Version manager for coordinating all versioning operations
VersionStatistics
Version statistics for monitoring and reporting

Enums§

StabilityLevel
API stability levels
SupportStatus
Support status for API versions