1pub mod dependency;
33pub mod hash;
34pub mod license;
35pub mod lockfile;
36pub mod manifest;
37pub mod relative_path;
38pub mod signing;
39mod strict_json;
40pub mod symbolic_path;
41pub mod tree;
42pub mod version_requirement;
43
44pub use crate::dependency::DependencyName;
45pub use crate::dependency::DependencyNameError;
46pub use crate::dependency::DependencySource;
47pub use crate::dependency::DependencySourceError;
48pub use crate::dependency::GitSelector;
49pub use crate::hash::ContentHash;
50pub use crate::hash::HashError;
51pub use crate::hash::Hasher;
52pub use crate::license::LicenseError;
53pub use crate::license::LicenseExpression;
54pub use crate::lockfile::DependencyEntry;
55pub use crate::lockfile::DependencyMap;
56pub use crate::lockfile::GitCommit;
57pub use crate::lockfile::GitCommitError;
58pub use crate::lockfile::LOCKFILE_VERSION;
59pub use crate::lockfile::Lockfile;
60pub use crate::lockfile::LockfileError;
61pub use crate::lockfile::ResolvedSource;
62pub use crate::manifest::Manifest;
63pub use crate::manifest::ManifestError;
64pub use crate::manifest::Readme;
65pub use crate::manifest::Tool;
66pub use crate::relative_path::RelativePath;
67pub use crate::relative_path::RelativePathError;
68pub use crate::signing::KeyError;
69pub use crate::signing::ModuleSignature;
70pub use crate::signing::Signature;
71pub use crate::signing::SignatureError;
72pub use crate::signing::SignatureFileError;
73pub use crate::signing::SigningKey;
74pub use crate::signing::VerifyError;
75pub use crate::signing::VerifyingKey;
76pub use crate::symbolic_path::SymbolicPath;
77pub use crate::symbolic_path::SymbolicPathError;
78pub use crate::tree::TreeError;
79pub use crate::tree::validate_tree;
80pub use crate::version_requirement::VersionRequirement;
81pub use crate::version_requirement::VersionRequirementError;
82
83pub const MANIFEST_FILENAME: &str = "module.json";
85
86pub const LOCKFILE_FILENAME: &str = "module-lock.json";
88
89pub const SIGNATURE_FILENAME: &str = "module.sig";
91
92pub const DEFAULT_ENTRYPOINT_FILENAME: &str = "index.wdl";
95
96pub const DEFAULT_README_FILENAME: &str = "README.md";
99
100pub(crate) fn starts_with_windows_drive(s: &str) -> bool {
105 let mut bytes = s.bytes();
106 matches!(
107 (bytes.next(), bytes.next()),
108 (Some(b'A'..=b'Z' | b'a'..=b'z'), Some(b':'))
109 )
110}