#![deny(missing_docs)]
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct WidgetMetadata {
pub crate_name: String,
pub crate_path: std::path::PathBuf,
pub type_name: String,
pub constructor: String,
}
#[derive(Debug, thiserror::Error)]
#[non_exhaustive]
pub enum Error {
#[error("cargo metadata failed: {0}")]
CargoMetadata(String),
#[error("invalid widget metadata for `{crate_name}`: {reason}")]
InvalidWidgetMetadata {
crate_name: String,
reason: String,
},
#[error("widget type name `{type_name}` is registered by multiple crates: {crates}")]
DuplicateTypeName {
type_name: String,
crates: String,
},
#[error(
"widget `{crate_name}` declares type name `{type_name}` which shadows a built-in widget"
)]
BuiltinCollision {
crate_name: String,
type_name: String,
},
#[error("widget crate basename `{basename}` is shared by multiple crates: {crates}")]
DuplicateCrateBasename {
basename: String,
crates: String,
},
#[error(
"widget `{crate_name}` constructor `{constructor}` is not a valid Rust \
identifier path (expected `module::Type::fn()` or similar)"
)]
InvalidConstructor {
crate_name: String,
constructor: String,
},
#[error("io error: {0}")]
Io(#[from] std::io::Error),
#[error("`cargo build` failed with status {0}")]
CargoBuildFailed(std::process::ExitStatus),
#[error(
"native widgets detected ({widgets}); stock binary cannot register them. \
Run `cargo plushie build` to produce a custom renderer instead."
)]
DownloadWithNativeWidgets {
widgets: String,
},
#[error(transparent)]
Other(#[from] anyhow::Error),
}
pub type Result<T> = std::result::Result<T, Error>;
pub mod discover;
pub mod doctor;
pub mod download;
pub mod generator;
pub mod patch_config;
pub mod platform;
pub mod scaffold;