Skip to main content

ExportFile

Struct ExportFile 

Source
pub struct ExportFile<W: Write + Seek> { /* private fields */ }
Expand description

Writes an r2z (r2modman zip) profile export.

Produces a zip archive containing a YAML manifest (export.r2x) and optional config files.

§Examples

use std::io::Cursor;
use loadsmith_thunderstore::r2z::{ExportFile, ProfileManifest, Mod, Version};
use thunderstore::PackageIdent;

let manifest = ProfileManifest::new(
    "Test Profile",
    vec![Mod::new(PackageIdent::new("A", "B"), Version::new(1, 0, 0), true)],
    (),
);

let mut export = ExportFile::create(Cursor::new(Vec::new()), &manifest).unwrap();
export.write_file("config/settings.cfg", &b"enabled=true"[..]).unwrap();
let data: Cursor<Vec<u8>> = export.finish().unwrap();
assert!(!data.get_ref().is_empty());

Implementations§

Source§

impl<W: Write + Seek> ExportFile<W>

Source

pub fn create<T: Serialize>( writer: W, manifest: &ProfileManifest<T>, ) -> Result<Self>

Creates a new export archive and writes the manifest as export.r2x.

§Examples
use std::io::Cursor;
use loadsmith_thunderstore::r2z::{ExportFile, ProfileManifest};

let manifest = ProfileManifest::new("Test", vec![], ());
let export = ExportFile::create(Cursor::new(Vec::new()), &manifest).unwrap();
Source

pub fn finish(self) -> Result<W>

Finalizes the zip archive and returns the inner writer.

§Examples
use std::io::Cursor;
use loadsmith_thunderstore::r2z::{ExportFile, ProfileManifest};

let manifest = ProfileManifest::new("Test", vec![], ());
let export = ExportFile::create(Cursor::new(Vec::new()), &manifest).unwrap();
let data = export.finish().unwrap();
Source

pub fn write_file( &mut self, zip_path: impl AsRef<Utf8Path>, reader: impl Read, ) -> Result<()>

Writes a file into the zip archive at the given virtual path.

The path is normalized before being stored in the archive.

§Examples
use std::io::Cursor;
use loadsmith_thunderstore::r2z::{ExportFile, ProfileManifest};

let manifest = ProfileManifest::new("Test", vec![], ());
let mut export = ExportFile::create(Cursor::new(Vec::new()), &manifest).unwrap();
export.write_file("BepInEx/config/plugin.cfg", &b"key=value"[..]).unwrap();
let _data = export.finish().unwrap();
Source

pub fn write_config_from_dir( &mut self, directory: impl AsRef<Utf8Path>, filter: bool, ) -> Result<()>

Walks a directory and writes its contents into the archive.

When filter is true, only files matching common config extensions (.cfg, .txt, .json, .yml, .yaml, .ini) or paths under BepInEx/config/ are included.

§Examples
use std::io::Cursor;
use loadsmith_thunderstore::r2z::{ExportFile, ProfileManifest};
use camino::Utf8Path;

let manifest = ProfileManifest::new("Test", vec![], ());
let mut export = ExportFile::create(Cursor::new(Vec::new()), &manifest).unwrap();
export.write_config_from_dir(Utf8Path::new("./config"), true).unwrap();
let _data = export.finish().unwrap();

Auto Trait Implementations§

§

impl<W> !UnwindSafe for ExportFile<W>

§

impl<W> Freeze for ExportFile<W>
where W: Freeze,

§

impl<W> RefUnwindSafe for ExportFile<W>
where W: RefUnwindSafe,

§

impl<W> Send for ExportFile<W>
where W: Send,

§

impl<W> Sync for ExportFile<W>
where W: Sync,

§

impl<W> Unpin for ExportFile<W>
where W: Unpin,

§

impl<W> UnsafeUnpin for ExportFile<W>
where W: UnsafeUnpin,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more