pub struct HakariCargoToml { /* private fields */ }
Expand description
Support for maintaining Cargo.toml
files that unify features in a workspace.
This struct maintains a context around a Cargo.toml
file. It provides facilities for diffing
the contents of the file, and for writing out new contents.
§Structure of the Cargo.toml file
The Cargo.toml
file is treated as partially generated. It is expected to have a section marked
off as, for example:
[package]
...
### BEGIN HAKARI SECTION
[dependencies]
...
[build-dependencies]
...
[dev-dependencies]
...
### END HAKARI SECTION
The part of the Cargo.toml
file between the BEGIN HAKARI SECTION
and END HAKARI SECTION
lines is managed by this struct, and changes to it may not be preserved. The part of the file
outside this section can be edited and its contents will be preserved.
§Setting up a new package
For Hakari to manage a package, a bit of initial prep work must be done:
-
Add a new library package in a desired location within your workspace, for example:
cargo new --lib hakari-package
. -
Copy and paste the following lines of code to the end of the package’s
Cargo.toml
file. Be sure to put in a trailing newline.### BEGIN HAKARI SECTION ### END HAKARI SECTION
-
Add an empty
build.rs
file (the exact contents don’t matter, but the presence of this file makes build dependencies work properly).fn main() {}
Implementations§
source§impl HakariCargoToml
impl HakariCargoToml
sourcepub const BEGIN_SECTION: &'static str = "\n### BEGIN HAKARI SECTION\n"
pub const BEGIN_SECTION: &'static str = "\n### BEGIN HAKARI SECTION\n"
The string "\n### BEGIN HAKARI SECTION\n"
. This string marks the beginning of the
generated section.
sourcepub const END_SECTION: &'static str = "\n### END HAKARI SECTION\n"
pub const END_SECTION: &'static str = "\n### END HAKARI SECTION\n"
The string "\n### END HAKARI SECTION\n"
. This string marks the end of the generated
section.
sourcepub fn new(toml_path: impl Into<Utf8PathBuf>) -> Result<Self, CargoTomlError>
pub fn new(toml_path: impl Into<Utf8PathBuf>) -> Result<Self, CargoTomlError>
Creates a new instance of HakariCargoToml
with the Cargo.toml
located at the given path.
Reads the contents of the file off of disk.
If the path is relative, it is evaluated with respect to the current directory.
Returns an error if the file couldn’t be read (other than if the file wasn’t found, which is a case handled by this struct).
sourcepub fn new_relative(
workspace_root: impl Into<Utf8PathBuf>,
crate_dir: impl AsRef<Utf8Path>,
) -> Result<Self, CargoTomlError>
pub fn new_relative( workspace_root: impl Into<Utf8PathBuf>, crate_dir: impl AsRef<Utf8Path>, ) -> Result<Self, CargoTomlError>
Creates a new instance of HakariCargoToml
at the given workspace root and crate
directory. Reads the contents of the file off of disk.
This is a convenience method around appending crate_dir
and Cargo.toml
to
workspace_root
.
If the path is relative, it is evaluated with respect to the current directory.
sourcepub fn new_in_memory(
toml_path: impl Into<Utf8PathBuf>,
contents: String,
) -> Result<Self, CargoTomlError>
pub fn new_in_memory( toml_path: impl Into<Utf8PathBuf>, contents: String, ) -> Result<Self, CargoTomlError>
Creates a new instance of HakariCargoToml
with the given path with the given contents as
read from disk.
This may be useful for test scenarios.
sourcepub fn contents(&self) -> &str
pub fn contents(&self) -> &str
Returns the contents of the file on disk as read at construction time.
sourcepub fn generated_offsets(&self) -> (usize, usize)
pub fn generated_offsets(&self) -> (usize, usize)
Returns the start and end offsets of the part of the file treated as generated.
sourcepub fn generated_contents(&self) -> &str
pub fn generated_contents(&self) -> &str
Returns the part of the file that is treated as generated.
This part of the file will be replaced on write.
sourcepub fn is_changed(&self, toml: &str) -> bool
pub fn is_changed(&self, toml: &str) -> bool
Returns true if the contents on disk are different from the provided TOML output.
sourcepub fn diff_toml<'a>(&'a self, toml: &'a str) -> Patch<'a, str>
pub fn diff_toml<'a>(&'a self, toml: &'a str) -> Patch<'a, str>
Computes the diff between the contents on disk and the provided TOML output.
This returns a diffy::Patch
, which can be formatted through methods provided by diffy
.
diffy
is re-exported at the top level of this crate.
§Examples
TODO
sourcepub fn write_to_file(self, toml: &str) -> Result<bool, CargoTomlError>
pub fn write_to_file(self, toml: &str) -> Result<bool, CargoTomlError>
Writes out the provided TOML to the generated section of the file. The rest of the file is left unmodified.
self
is consumed because the contents of the file are now assumed to be invalid.
Returns true if the contents were different and the file was written out, false if the contents were the same and the file was not written out, and an error if there was an issue while writing the file out.
sourcepub fn write(&self, toml: &str, out: impl Write) -> Result<()>
pub fn write(&self, toml: &str, out: impl Write) -> Result<()>
Writes out the full contents, including the provided TOML, to the given writer.
sourcepub fn write_to_fmt(&self, toml: &str, out: impl Write) -> Result
pub fn write_to_fmt(&self, toml: &str, out: impl Write) -> Result
Writes out the full contents, including the provided TOML, to the given fmt::Write
instance.
std::io::Write
expects bytes to be written to it, so using it with a &mut String
is
inconvenient. This alternative is more convenient, and also works for fmt::Formatter
instances.
Trait Implementations§
source§impl Clone for HakariCargoToml
impl Clone for HakariCargoToml
source§fn clone(&self) -> HakariCargoToml
fn clone(&self) -> HakariCargoToml
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreAuto Trait Implementations§
impl Freeze for HakariCargoToml
impl RefUnwindSafe for HakariCargoToml
impl Send for HakariCargoToml
impl Sync for HakariCargoToml
impl Unpin for HakariCargoToml
impl UnwindSafe for HakariCargoToml
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
source§fn black<'a>(&'a self) -> FgColorDisplay<'a, Black, Self>
fn black<'a>(&'a self) -> FgColorDisplay<'a, Black, Self>
source§fn on_black<'a>(&'a self) -> BgColorDisplay<'a, Black, Self>
fn on_black<'a>(&'a self) -> BgColorDisplay<'a, Black, Self>
source§fn red<'a>(&'a self) -> FgColorDisplay<'a, Red, Self>
fn red<'a>(&'a self) -> FgColorDisplay<'a, Red, Self>
source§fn on_red<'a>(&'a self) -> BgColorDisplay<'a, Red, Self>
fn on_red<'a>(&'a self) -> BgColorDisplay<'a, Red, Self>
source§fn green<'a>(&'a self) -> FgColorDisplay<'a, Green, Self>
fn green<'a>(&'a self) -> FgColorDisplay<'a, Green, Self>
source§fn on_green<'a>(&'a self) -> BgColorDisplay<'a, Green, Self>
fn on_green<'a>(&'a self) -> BgColorDisplay<'a, Green, Self>
source§fn yellow<'a>(&'a self) -> FgColorDisplay<'a, Yellow, Self>
fn yellow<'a>(&'a self) -> FgColorDisplay<'a, Yellow, Self>
source§fn on_yellow<'a>(&'a self) -> BgColorDisplay<'a, Yellow, Self>
fn on_yellow<'a>(&'a self) -> BgColorDisplay<'a, Yellow, Self>
source§fn blue<'a>(&'a self) -> FgColorDisplay<'a, Blue, Self>
fn blue<'a>(&'a self) -> FgColorDisplay<'a, Blue, Self>
source§fn on_blue<'a>(&'a self) -> BgColorDisplay<'a, Blue, Self>
fn on_blue<'a>(&'a self) -> BgColorDisplay<'a, Blue, Self>
source§fn magenta<'a>(&'a self) -> FgColorDisplay<'a, Magenta, Self>
fn magenta<'a>(&'a self) -> FgColorDisplay<'a, Magenta, Self>
source§fn on_magenta<'a>(&'a self) -> BgColorDisplay<'a, Magenta, Self>
fn on_magenta<'a>(&'a self) -> BgColorDisplay<'a, Magenta, Self>
source§fn purple<'a>(&'a self) -> FgColorDisplay<'a, Magenta, Self>
fn purple<'a>(&'a self) -> FgColorDisplay<'a, Magenta, Self>
source§fn on_purple<'a>(&'a self) -> BgColorDisplay<'a, Magenta, Self>
fn on_purple<'a>(&'a self) -> BgColorDisplay<'a, Magenta, Self>
source§fn cyan<'a>(&'a self) -> FgColorDisplay<'a, Cyan, Self>
fn cyan<'a>(&'a self) -> FgColorDisplay<'a, Cyan, Self>
source§fn on_cyan<'a>(&'a self) -> BgColorDisplay<'a, Cyan, Self>
fn on_cyan<'a>(&'a self) -> BgColorDisplay<'a, Cyan, Self>
source§fn white<'a>(&'a self) -> FgColorDisplay<'a, White, Self>
fn white<'a>(&'a self) -> FgColorDisplay<'a, White, Self>
source§fn on_white<'a>(&'a self) -> BgColorDisplay<'a, White, Self>
fn on_white<'a>(&'a self) -> BgColorDisplay<'a, White, Self>
source§fn default_color<'a>(&'a self) -> FgColorDisplay<'a, Default, Self>
fn default_color<'a>(&'a self) -> FgColorDisplay<'a, Default, Self>
source§fn on_default_color<'a>(&'a self) -> BgColorDisplay<'a, Default, Self>
fn on_default_color<'a>(&'a self) -> BgColorDisplay<'a, Default, Self>
source§fn bright_black<'a>(&'a self) -> FgColorDisplay<'a, BrightBlack, Self>
fn bright_black<'a>(&'a self) -> FgColorDisplay<'a, BrightBlack, Self>
source§fn on_bright_black<'a>(&'a self) -> BgColorDisplay<'a, BrightBlack, Self>
fn on_bright_black<'a>(&'a self) -> BgColorDisplay<'a, BrightBlack, Self>
source§fn bright_red<'a>(&'a self) -> FgColorDisplay<'a, BrightRed, Self>
fn bright_red<'a>(&'a self) -> FgColorDisplay<'a, BrightRed, Self>
source§fn on_bright_red<'a>(&'a self) -> BgColorDisplay<'a, BrightRed, Self>
fn on_bright_red<'a>(&'a self) -> BgColorDisplay<'a, BrightRed, Self>
source§fn bright_green<'a>(&'a self) -> FgColorDisplay<'a, BrightGreen, Self>
fn bright_green<'a>(&'a self) -> FgColorDisplay<'a, BrightGreen, Self>
source§fn on_bright_green<'a>(&'a self) -> BgColorDisplay<'a, BrightGreen, Self>
fn on_bright_green<'a>(&'a self) -> BgColorDisplay<'a, BrightGreen, Self>
source§fn bright_yellow<'a>(&'a self) -> FgColorDisplay<'a, BrightYellow, Self>
fn bright_yellow<'a>(&'a self) -> FgColorDisplay<'a, BrightYellow, Self>
source§fn on_bright_yellow<'a>(&'a self) -> BgColorDisplay<'a, BrightYellow, Self>
fn on_bright_yellow<'a>(&'a self) -> BgColorDisplay<'a, BrightYellow, Self>
source§fn bright_blue<'a>(&'a self) -> FgColorDisplay<'a, BrightBlue, Self>
fn bright_blue<'a>(&'a self) -> FgColorDisplay<'a, BrightBlue, Self>
source§fn on_bright_blue<'a>(&'a self) -> BgColorDisplay<'a, BrightBlue, Self>
fn on_bright_blue<'a>(&'a self) -> BgColorDisplay<'a, BrightBlue, Self>
source§fn bright_magenta<'a>(&'a self) -> FgColorDisplay<'a, BrightMagenta, Self>
fn bright_magenta<'a>(&'a self) -> FgColorDisplay<'a, BrightMagenta, Self>
source§fn on_bright_magenta<'a>(&'a self) -> BgColorDisplay<'a, BrightMagenta, Self>
fn on_bright_magenta<'a>(&'a self) -> BgColorDisplay<'a, BrightMagenta, Self>
source§fn bright_purple<'a>(&'a self) -> FgColorDisplay<'a, BrightMagenta, Self>
fn bright_purple<'a>(&'a self) -> FgColorDisplay<'a, BrightMagenta, Self>
source§fn on_bright_purple<'a>(&'a self) -> BgColorDisplay<'a, BrightMagenta, Self>
fn on_bright_purple<'a>(&'a self) -> BgColorDisplay<'a, BrightMagenta, Self>
source§fn bright_cyan<'a>(&'a self) -> FgColorDisplay<'a, BrightCyan, Self>
fn bright_cyan<'a>(&'a self) -> FgColorDisplay<'a, BrightCyan, Self>
source§fn on_bright_cyan<'a>(&'a self) -> BgColorDisplay<'a, BrightCyan, Self>
fn on_bright_cyan<'a>(&'a self) -> BgColorDisplay<'a, BrightCyan, Self>
source§fn bright_white<'a>(&'a self) -> FgColorDisplay<'a, BrightWhite, Self>
fn bright_white<'a>(&'a self) -> FgColorDisplay<'a, BrightWhite, Self>
source§fn on_bright_white<'a>(&'a self) -> BgColorDisplay<'a, BrightWhite, Self>
fn on_bright_white<'a>(&'a self) -> BgColorDisplay<'a, BrightWhite, Self>
source§fn bold<'a>(&'a self) -> BoldDisplay<'a, Self>
fn bold<'a>(&'a self) -> BoldDisplay<'a, Self>
source§fn dimmed<'a>(&'a self) -> DimDisplay<'a, Self>
fn dimmed<'a>(&'a self) -> DimDisplay<'a, Self>
source§fn italic<'a>(&'a self) -> ItalicDisplay<'a, Self>
fn italic<'a>(&'a self) -> ItalicDisplay<'a, Self>
source§fn underline<'a>(&'a self) -> UnderlineDisplay<'a, Self>
fn underline<'a>(&'a self) -> UnderlineDisplay<'a, Self>
source§fn blink<'a>(&'a self) -> BlinkDisplay<'a, Self>
fn blink<'a>(&'a self) -> BlinkDisplay<'a, Self>
source§fn blink_fast<'a>(&'a self) -> BlinkFastDisplay<'a, Self>
fn blink_fast<'a>(&'a self) -> BlinkFastDisplay<'a, Self>
source§fn reversed<'a>(&'a self) -> ReversedDisplay<'a, Self>
fn reversed<'a>(&'a self) -> ReversedDisplay<'a, Self>
source§fn strikethrough<'a>(&'a self) -> StrikeThroughDisplay<'a, Self>
fn strikethrough<'a>(&'a self) -> StrikeThroughDisplay<'a, Self>
source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg
or
a color-specific method, such as OwoColorize::green
, Read moresource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg
or
a color-specific method, such as OwoColorize::on_yellow
, Read more