Skip to main content

CategoryRegistry

Struct CategoryRegistry 

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

In-memory category store, persisted to a single TOML file.

All public methods that mutate state (create, edit, remove) are expected to be paired with a save call by the caller — the session actor wraps these in a single critical section to avoid tearing. Concurrent reads through get and list are safe when the registry is wrapped in a parking_lot::RwLock.

Implementations§

Source§

impl CategoryRegistry

Source

pub fn new(path: PathBuf) -> CategoryRegistry

Create a new in-memory registry bound to path. The file is not touched until the first save.

Source

pub fn load(path: PathBuf) -> CategoryRegistry

Load a registry from its TOML file at path.

On failure this method is lenient: a missing file yields an empty registry (lazy materialisation); a malformed file is renamed to <name>.bak (or <name>.bak.N on collision) and an empty registry is returned so the session can still start.

Source

pub fn path(&self) -> &Path

Absolute path of the backing TOML file.

Source

pub fn len(&self) -> usize

Number of categories currently stored.

Source

pub fn is_empty(&self) -> bool

Return true when the registry has no categories.

Source

pub fn get(&self, name: &str) -> Option<&CategoryMetadata>

Look up a category by name. Returns None for the empty-string name (qBt convention: empty means “uncategorised”).

Source

pub fn contains(&self, name: &str) -> bool

True when the registry contains a category with name.

Source

pub fn list(&self) -> Vec<CategoryMetadata>

All categories as an unordered list. Callers that need stable ordering should sort by name.

Source

pub fn create( &mut self, name: String, save_path: PathBuf, ) -> Result<(), CategoryError>

Create a new category.

§Errors

Returns CategoryError::InvalidName if name fails validation, or CategoryError::AlreadyExists if a category with that name is already registered. Does NOT persist to disk — call save after successful mutation.

Source

pub fn edit( &mut self, name: &str, save_path: PathBuf, ) -> Result<(), CategoryError>

Update the save_path for an existing category.

§Errors

Returns CategoryError::NotFound if no category with name is registered, or CategoryError::InvalidName if name itself is malformed.

Source

pub fn remove(&mut self, names: &[String]) -> Vec<String>

Remove zero or more categories. Unknown names are silently ignored (qBt behaviour). Returns the list of names that were actually removed so callers can clear the category label on any torrents that pointed at them.

Source

pub fn save(&self) -> Result<(), CategoryError>

Atomically persist this registry to disk.

Writes to a sibling temp file in the same directory, then persist() renames into place. Creates parent directories as needed.

§Errors

Returns CategoryError::Persistence on I/O failure and CategoryError::Serialise if TOML encoding fails (should be impossible given the schema is all-String + PathBuf).

Trait Implementations§

Source§

impl Clone for CategoryRegistry

Source§

fn clone(&self) -> CategoryRegistry

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 CategoryRegistry

Source§

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

Formats the value using the given formatter. Read more

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> 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: 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: 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> 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