pub mod homebrew;
pub mod npm;
pub mod user;
use super::*;
use homebrew::*;
use npm::*;
use user::*;
#[derive(Debug, Default, Clone, PartialEq, Eq)]
pub struct PublisherConfig {
pub homebrew: Option<HomebrewPublisherConfig>,
pub npm: Option<NpmPublisherConfig>,
pub user: Option<UserPublisherConfig>,
}
#[derive(Debug, Clone)]
pub struct PublisherConfigInheritable {
pub common: CommonPublisherConfig,
pub homebrew: Option<HomebrewPublisherLayer>,
pub npm: Option<NpmPublisherLayer>,
pub user: Option<UserPublisherLayer>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PublisherLayer {
#[serde(flatten)]
pub common: CommonPublisherLayer,
pub homebrew: Option<BoolOr<HomebrewPublisherLayer>>,
pub npm: Option<BoolOr<NpmPublisherLayer>>,
pub user: Option<BoolOr<UserPublisherLayer>>,
}
impl PublisherConfigInheritable {
pub fn defaults_for_package(workspaces: &WorkspaceGraph, pkg_idx: PackageIdx) -> Self {
Self {
common: CommonPublisherConfig::defaults_for_package(workspaces, pkg_idx),
homebrew: None,
npm: None,
user: None,
}
}
pub fn apply_inheritance_for_package(
self,
workspaces: &WorkspaceGraph,
pkg_idx: PackageIdx,
) -> PublisherConfig {
let Self {
common,
homebrew,
npm,
user,
} = self;
let homebrew = homebrew.map(|homebrew| {
let mut default =
HomebrewPublisherConfig::defaults_for_package(workspaces, pkg_idx, &common);
default.apply_layer(homebrew);
default
});
let npm = npm.map(|npm| {
let mut default =
NpmPublisherConfig::defaults_for_package(workspaces, pkg_idx, &common);
default.apply_layer(npm);
default
});
let user = user.map(|user| {
let mut default =
UserPublisherConfig::defaults_for_package(workspaces, pkg_idx, &common);
default.apply_layer(user);
default
});
PublisherConfig {
homebrew,
npm,
user,
}
}
}
impl ApplyLayer for PublisherConfigInheritable {
type Layer = PublisherLayer;
fn apply_layer(
&mut self,
Self::Layer {
common,
homebrew,
npm,
user,
}: Self::Layer,
) {
self.common.apply_layer(common);
self.homebrew.apply_bool_layer(homebrew);
self.npm.apply_bool_layer(npm);
self.user.apply_bool_layer(user);
}
}
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
pub struct CommonPublisherLayer {
#[serde(skip_serializing_if = "Option::is_none")]
pub prereleases: Option<bool>,
}
#[derive(Debug, Default, Clone, PartialEq, Eq)]
pub struct CommonPublisherConfig {
pub prereleases: bool,
}
impl CommonPublisherConfig {
pub fn defaults_for_package(_workspaces: &WorkspaceGraph, _pkg_idx: PackageIdx) -> Self {
Self { prereleases: false }
}
}
impl ApplyLayer for CommonPublisherConfig {
type Layer = CommonPublisherLayer;
fn apply_layer(&mut self, Self::Layer { prereleases }: Self::Layer) {
self.prereleases.apply_val(prereleases);
}
}
impl ApplyLayer for CommonPublisherLayer {
type Layer = CommonPublisherLayer;
fn apply_layer(&mut self, Self::Layer { prereleases }: Self::Layer) {
self.prereleases.apply_opt(prereleases);
}
}