Skip to main content

torsh_package/
lib.rs

1//! ToRSh Package - Model packaging and distribution
2//!
3//! This module provides functionality similar to torch.package for creating
4//! self-contained model packages that include code, weights, and dependencies.
5//!
6//! # Features
7//!
8//! - **Package Creation**: Create self-contained model packages with the [`Package`] struct
9//! - **Builder Pattern**: Use [`PackageBuilder`] for convenient package creation
10//! - **Import/Export**: Load and save packages with [`PackageImporter`] and [`PackageExporter`]
11//! - **Resource Management**: Manage different types of resources with [`Resource`]
12//! - **Version Management**: Handle semantic versioning with [`PackageVersion`]
13//!
14//! # Quick Start
15//!
16//! ```rust,no_run
17//! use torsh_package::{Package, PackageBuilder};
18//!
19//! // Create a package using the builder pattern
20//! let package = PackageBuilder::new("my-model".to_string(), "1.0.0".to_string())
21//!     .author("Your Name".to_string())
22//!     .description("My awesome model".to_string())
23//!     .add_dependency("torch", "2.0")
24//!     .package();
25//!
26//! // Or create directly
27//! let mut package = Package::new("my-model".to_string(), "1.0.0".to_string());
28//! package.add_source_file("main", "fn main() { println!(\"Hello!\"); }").unwrap();
29//!
30//! // Save the package
31//! package.save("my-model.torshpkg").unwrap();
32//!
33//! // Load a package
34//! let loaded = Package::load("my-model.torshpkg").unwrap();
35//! ```
36
37#![allow(clippy::result_large_err)]
38#![deny(missing_docs)]
39
40// Core modules
41pub mod access_control;
42pub mod audit;
43pub mod audit_storage;
44pub mod backup;
45pub mod builder;
46pub mod cdn;
47pub mod cloud_storage;
48pub mod compression;
49pub mod delta;
50pub mod dependency;
51pub mod dependency_installer;
52pub mod dependency_lockfile;
53pub mod dependency_solver;
54pub mod diagnostics;
55pub mod exporter;
56pub mod format_compat;
57pub mod governance;
58pub mod importer;
59pub mod lazy_resources;
60pub mod manifest;
61pub mod mirror;
62pub mod monitoring;
63pub mod optimization;
64pub mod package;
65pub mod profiling;
66pub mod replication;
67pub mod resources;
68pub mod sandbox;
69pub mod security;
70pub mod storage;
71pub mod syslog_integration;
72pub mod utils;
73pub mod version;
74pub mod vulnerability;
75
76// Async and registry modules
77#[cfg(feature = "async")]
78pub mod async_ops;
79pub mod registry;
80
81// Re-exports for convenience
82pub use access_control::{
83    AccessCheckResult, AccessControlManager, AccessLevel, AclEntry, Organization,
84    OrganizationMembership, PackageOwnership, Permission, Role, User,
85};
86pub use audit::{
87    ActionResult, AuditEvent, AuditEventType, AuditListener, AuditLogConfig, AuditLogFormat,
88    AuditLogger, AuditQuery, AuditSeverity, AuditStatistics,
89};
90pub use audit_storage::{
91    AuditStorage, DatabaseStatistics, InMemoryStorage, PoolStatistics, PostgresStorage,
92    PostgresStorageConfig, SqliteStorage, SqliteStorageConfig, SslMode, StorageStatistics,
93};
94pub use backup::{
95    BackupConfig, BackupDestination, BackupManager, BackupMetadata, BackupStatistics,
96    BackupStrategy, RecoveryPoint, RetentionPolicy, VerificationResult,
97};
98pub use builder::{BuilderConfig, PackageBuilder};
99pub use cdn::{
100    CacheControl, CdnConfig, CdnManager, CdnProvider, CdnRegion, CdnStatistics, EdgeNode,
101    EdgeNodeStatus,
102};
103pub use cloud_storage::{
104    AzureConfig, GcsConfig, MockAzureStorage, MockGcsStorage, MockS3Storage, S3Config,
105};
106pub use compression::{
107    AdvancedCompressor, CompressionAlgorithm, CompressionConfig, CompressionLevel,
108    CompressionResult, CompressionStats, CompressionStrategy, DecompressionResult,
109    ParallelCompressor,
110};
111pub use delta::{
112    DeltaOperation, DeltaPackageExt, DeltaPatch, DeltaPatchApplier, DeltaPatchBuilder,
113};
114pub use dependency::{
115    DependencyConflict, DependencyGraph, DependencyResolver, DependencySpec, LocalPackageRegistry,
116    PackageInfo, PackageRegistry, ResolutionStrategy, ResolvedDependency,
117};
118pub use dependency_installer::{
119    DownloadOptions, InstallationPlan, InstallationProgress, ParallelDependencyInstaller,
120    PlannedPackage,
121};
122pub use dependency_lockfile::{
123    LockedDependency, LockedPackage, LockfileGenerator, LockfileValidator, PackageLockfile,
124};
125pub use dependency_solver::{
126    Assignment, CdclSolver, DependencySatSolver, DependencySolution, SatClause, SatLiteral,
127    SatVariable, VersionConstraint,
128};
129pub use diagnostics::{
130    DiagnosticIssue, DiagnosticReport, HealthStatus, IssueCategory, IssueSeverity,
131    PackageDiagnostics, PackageStatistics, ResourceValidation, SecurityAssessment,
132    ValidationResult,
133};
134pub use exporter::{ExportConfig, PackageExporter};
135pub use format_compat::{
136    FormatCompatibilityManager, FormatConverter, HuggingFaceConverter, PackageFormat,
137    PyTorchConverter,
138};
139pub use governance::{
140    ComplianceIssue, ComplianceLevel, ComplianceMetadata, ComplianceReport,
141    IssueSeverity as ComplianceIssueSeverity, LineageEdge, LineageQueryResult, LineageRelation,
142    LineageStatistics, LineageTracker, ProvenanceInfo, TransformationRecord,
143};
144pub use importer::{ImportConfig, PackageImporter};
145pub use lazy_resources::{
146    EvictionStrategy, LazyResource, LazyResourceManager, MappedResource, ResourceStreamWriter,
147    StreamingResource,
148};
149pub use manifest::{ModuleInfo, PackageManifest, ResourceInfo};
150pub use mirror::{
151    FailoverConfig, Mirror, MirrorConfig, MirrorHealth, MirrorManager, MirrorSelection,
152    MirrorStatistics, SelectionStrategy, SyncStatus,
153};
154pub use monitoring::{
155    Alert, AlertSeverity, AlertThreshold, AnalyticsReport, MetricPoint, MetricType,
156    MetricsCollector, PackageStats, RegionStats, TimeSeries, TimeSeriesStats, UserStats,
157};
158pub use optimization::{
159    CompressibleResource, CompressionAnalysis, DeduplicationAnalysis, OptimizationOpportunity,
160    OptimizationReport, OptimizationType, PackageOptimizer,
161};
162pub use package::Package;
163pub use profiling::{
164    global_profiler, profile, OperationProfiler, PackageOperation, ProfileEntry, ProfileGuard,
165    ProfileStats,
166};
167pub use replication::{
168    ConflictResolution, ConsistencyLevel, NodeStatus, OperationStatus, ReplicaMetadata,
169    ReplicationConfig, ReplicationConflict, ReplicationManager, ReplicationNode,
170    ReplicationOperation, ReplicationStatistics, ReplicationStrategy,
171};
172pub use resources::{Resource, ResourceType};
173pub use sandbox::{
174    CapabilitySet, FilesystemPolicy, NetworkPolicy, PortRange, ResourceLimits, ResourceMonitor,
175    ResourceUsageStats, Sandbox, SandboxConfig, SandboxResult, SandboxViolation, ViolationSeverity,
176    ViolationType,
177};
178pub use security::{
179    EncryptedPackage, EncryptionAlgorithm, PackageEncryptor, PackageSignature, PackageSigner,
180    SignatureAlgorithm,
181};
182pub use storage::{LocalStorage, StorageBackend, StorageManager, StorageObject, StorageStats};
183pub use syslog_integration::{
184    SyslogClient, SyslogConfig, SyslogFacility, SyslogProtocol, SyslogSeverity, SyslogStatistics,
185    SyslogTransport,
186};
187#[cfg(feature = "with-nn")]
188pub use utils::export_module;
189pub use utils::{
190    calculate_checksum, calculate_hash, estimate_compression_ratio, format_file_size,
191    get_file_extension, get_relative_path, import_module, is_safe_path, normalize_path,
192    parse_content_type, sanitize_filename, validate_package_metadata, validate_package_name,
193    validate_resource_path, validate_version, verify_checksum, MemoryStats, PerformanceTimer,
194};
195pub use version::{CompatibilityChecker, PackageVersion, VersionComparator, VersionRequirement};
196pub use vulnerability::{
197    IssueType, ScanPolicy, ScanReport, SecurityIssue, Severity, VulnerabilityScanner,
198};
199
200#[cfg(feature = "async")]
201pub use async_ops::{AsyncPackageLoader, AsyncPackageSaver, BackgroundProcessor, DownloadProgress};
202pub use registry::{PackageCache, PackageMetadata, RegistryClient, RegistryConfig, SearchResult};
203
204/// Package format version
205///
206/// This follows semantic versioning where:
207/// - Major version changes indicate breaking format changes
208/// - Minor version changes indicate backward-compatible additions
209/// - Patch version changes indicate bug fixes
210pub const PACKAGE_FORMAT_VERSION: &str = "1.0.0";
211
212/// Default file extension for ToRSh packages
213pub const PACKAGE_EXTENSION: &str = "torshpkg";
214
215/// Maximum package size in bytes (1GB by default)
216pub const DEFAULT_MAX_PACKAGE_SIZE: usize = 1024 * 1024 * 1024;
217
218/// Maximum number of resources per package
219pub const DEFAULT_MAX_RESOURCES: usize = 10000;
220
221#[cfg(test)]
222mod tests {
223    use super::*;
224
225    #[test]
226    fn test_constants() {
227        assert_eq!(PACKAGE_FORMAT_VERSION, "1.0.0");
228        assert_eq!(PACKAGE_EXTENSION, "torshpkg");
229        assert!(DEFAULT_MAX_PACKAGE_SIZE > 0);
230        assert!(DEFAULT_MAX_RESOURCES > 0);
231    }
232
233    #[test]
234    fn test_format_version_parsing() {
235        let version = semver::Version::parse(PACKAGE_FORMAT_VERSION).unwrap();
236        assert_eq!(version.major, 1);
237        assert_eq!(version.minor, 0);
238        assert_eq!(version.patch, 0);
239    }
240}