use get::Get; use std::path::PathBuf; use crate::{ atom::{Atom, Name, Slot, Version}, useflag::{IUseFlag, UseFlag}, }; mod parsers; #[derive(Clone, Debug)] pub enum Conditional { Negative(UseFlag), Positive(UseFlag), } #[derive(Clone, Debug)] pub enum Depend { Element(T), AllOf(Vec), AnyOf(Vec), OneOf(Vec), ConditionalGroup(Conditional, Vec), } #[derive(Debug, Clone)] pub enum UriPrefix { Mirror, Fetch, } #[derive(Debug, Clone, Get)] pub struct Uri { #[get(kind = "deref")] protocol: String, #[get(kind = "deref")] path: String, } #[derive(Debug, Clone)] pub enum SrcUri { Filename(PathBuf), Uri { prefix: Option, uri: Uri, filename: Option, }, } #[derive(Debug, Clone, Get)] pub struct License(#[get(method = "get", kind = "deref")] String); #[derive(Debug, Clone, Get)] pub struct Eapi(#[get(method = "get", kind = "deref")] String); #[derive(Debug, Clone, Get)] pub struct Eclass(#[get(method = "get", kind = "deref")] String); #[derive(Debug, Clone, Get)] pub struct Ebuild { pub(super) name: Name, pub(super) version: Version, pub(super) slot: Option, pub(super) homepage: Option, #[get(kind = "deref")] pub(super) src_uri: Vec>, pub(super) eapi: Option, #[get(kind = "deref")] pub(super) inherit: Vec, #[get(kind = "deref")] pub(super) iuse: Vec, #[get(kind = "deref")] pub(super) license: Vec>, pub(super) description: Option, #[get(kind = "deref")] pub(super) depend: Vec>, #[get(kind = "deref")] pub(super) bdepend: Vec>, #[get(kind = "deref")] pub(super) rdepend: Vec>, #[get(kind = "deref")] pub(super) idepend: Vec>, }