Skip to main content

RouteRule

Struct RouteRule 

Source
pub struct RouteRule { /* private fields */ }
Expand description

A route-based install rule that maps files by directory name and file extension.

A RouteRule looks for a named directory component in the input path and maps the remaining suffix into the target directory. File extensions can be used as an additional matching criterion.

§Examples

use camino::Utf8PathBuf;
use loadsmith_core::{PackageRef, PackageId, Version};
use loadsmith_install::RouteRule;

let rule = RouteRule::new_static("BepInEx\\plugins")
    .with_file_extension("dll");
let pkg = PackageRef::new(PackageId::new("x753-More_Suits"), Version::new(1, 0, 3));

assert!(rule.matches("MyPlugin.dll"));
assert!(rule.matches_path("BepInEx\\plugins\\MyPlugin.dll"));
assert_eq!(
    rule.map_file("plugins\\MyPlugin.dll", &pkg),
    Some(Utf8PathBuf::from("BepInEx\\plugins\\x753-More_Suits\\MyPlugin.dll"))
);

Implementations§

Source§

impl RouteRule

Source

pub fn new_static(path: &'static str) -> Self

Creates a route rule from a static path string. The rule name is derived from the last path component.

Source

pub fn new(path: impl Into<Cow<'static, Utf8Path>>) -> Self

Creates a route rule from any path. The rule name is derived from the last path component.

Source

pub fn new_with_target( name: impl Into<Cow<'static, str>>, target: impl Into<Cow<'static, Utf8Path>>, ) -> Self

Creates a route rule with an explicit name and target path.

The name is the directory component that triggers a match; target is the directory where matched files are installed.

Source

pub fn with_file_extension( self, extension: impl Into<Cow<'static, str>>, ) -> Self

Adds a file extension to the matching set.

Source

pub fn with_file_extensions(self, extensions: Vec<Cow<'static, str>>) -> Self

Replaces the entire set of matching file extensions.

Source

pub fn with_flatten(self, flatten: bool) -> Self

Sets whether to flatten the mapped path (remove intermediate directories).

Source

pub fn with_subdir(self, subdir: bool) -> Self

Sets whether to create a subdirectory named after the package ID inside the target directory.

Source

pub fn with_mutable(self, mutable: bool) -> Self

Sets whether the rule allows mutable (user-modifiable) files.

Source

pub fn matches(&self, path: impl AsRef<Utf8Path>) -> bool

Returns true if the path matches by extension or by route name.

Source

pub fn matches_extension(&self, path: impl AsRef<Utf8Path>) -> bool

Returns true if the file name has one of the rule’s registered extensions.

Source

pub fn matches_path(&self, path: impl AsRef<Utf8Path>) -> bool

Returns true if the path contains the route’s name as a path component.

Source

pub fn map_file( &self, path: impl AsRef<Utf8Path>, package: &PackageRef, ) -> Option<Utf8PathBuf>

Maps a file path to its install destination under the rule’s target directory.

If the path contains the route name, the part before the route name becomes the prefix; otherwise the parent directory becomes the prefix. When subdir is enabled the package ID is inserted as an intermediate directory. When flatten is disabled the prefix is preserved in the output.

Returns true if the rule prefers hard links over file copies.

Links are used when the rule is not marked as mutable.

Source

pub fn conflict_strategy(&self) -> ConflictStrategy

Returns the conflict strategy for this route rule (always Skip).

Route rules never overwrite existing files and never error; they silently skip.

Trait Implementations§

Source§

impl Clone for RouteRule

Source§

fn clone(&self) -> RouteRule

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for RouteRule

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for RouteRule

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Eq for RouteRule

Source§

impl From<RouteRule> for InstallRule

Source§

fn from(route: RouteRule) -> Self

Converts to this type from the input type.
Source§

impl PartialEq for RouteRule

Source§

fn eq(&self, other: &RouteRule) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Serialize for RouteRule

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for RouteRule

Auto Trait Implementations§

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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