Skip to main content

portage_atom/
lib.rs

1//! Lightweight Portage package atom parser based on [PMS]
2//!
3//! This crate provides types and parsing for Gentoo/Portage package atoms
4//! according to the [Package Manager Specification (PMS)][PMS].
5//!
6//! [PMS]: https://projects.gentoo.org/pms/9/pms.html
7//!
8//! # Examples
9//!
10//! Parse a simple unversioned atom:
11//! ```
12//! use portage_atom::Cpn;
13//!
14//! let cpn = Cpn::parse("dev-lang/rust").unwrap();
15//! assert_eq!(cpn.category, "dev-lang");
16//! assert_eq!(cpn.package, "rust");
17//! ```
18//!
19//! Parse a versioned atom:
20//! ```
21//! use portage_atom::Cpv;
22//!
23//! let cpv = Cpv::parse("dev-lang/rust-1.75.0").unwrap();
24//! assert_eq!(cpv.version.numbers[0], 1);
25//! ```
26//!
27//! Parse a full dependency:
28//! ```
29//! use portage_atom::Dep;
30//!
31//! let dep = Dep::parse(">=dev-lang/rust-1.75.0:0[llvm_targets_AMDGPU]").unwrap();
32//! assert!(dep.version.is_some());
33//! assert!(dep.slot_dep.is_some());
34//! assert!(dep.use_deps.is_some());
35//! ```
36
37mod cpn;
38mod cpv;
39mod dep;
40mod dep_entry;
41mod error;
42mod parsers;
43mod slot;
44mod use_dep;
45mod version;
46
47pub use gentoo_interner;
48
49// Re-export main types
50pub use cpn::Cpn;
51pub use cpv::Cpv;
52pub use dep::{Blocker, Dep};
53pub use dep_entry::DepEntry;
54pub use error::{Error, Result};
55pub use slot::{Slot, SlotDep, SlotOperator};
56pub use use_dep::{UseDefault, UseDep, UseDepKind};
57pub use version::{Operator, Revision, Suffix, SuffixKind, Version};