Skip to main content

WorkspaceId

Struct WorkspaceId 

Source
pub struct WorkspaceId(/* private fields */);
Expand description

A workspace identifier.

Stable across sessions and across machines. Two mechanisms exist (per docs/concepts/workspace-model.md § 3):

  • Git-backedWorkspaceId::from_git_remote(origin_url) produces a deterministic hash of the normalised remote URL. Branch is not part of the ID by default; all branches of a repo share one workspace.
  • Non-gitWorkspaceId::from_ulid(Ulid) creates an explicit identifier for workspaces not backed by a git repo.

§Examples

use mimir_core::WorkspaceId;

let a = WorkspaceId::from_git_remote("git@github.com:buildepicshit/Mimir.git").unwrap();
let b = WorkspaceId::from_git_remote("https://github.com/buildepicshit/Mimir").unwrap();
// The normalisation collapses scheme and trailing `.git` so equivalent
// remotes resolve to equivalent workspace IDs where host+path match.
// (Exact normalisation rules live in §§ 3.1 of workspace-model.md.)
assert_ne!(a, b); // SSH and HTTPS remotes with different hosts do differ.

Implementations§

Source§

impl WorkspaceId

Source

pub fn from_git_remote(origin_url: &str) -> Result<Self, WorkspaceIdError>

Compute a workspace ID from a git origin remote URL.

Normalisation performed before hashing:

  1. Trim surrounding whitespace.
  2. Lowercase the whole URL.
  3. Strip any trailing .git suffix.
  4. Strip any trailing slash.

Branch is intentionally not included (see workspace-model.md § 3.1).

§Errors

Returns WorkspaceIdError::EmptyRemote if the URL is empty after normalisation.

Source

pub fn from_ulid(ulid: Ulid) -> Self

Construct from an explicit ULID — for non-git workspaces created via mimir init --workspace <name> (see workspace-model.md § 3.2).

Source

pub const fn as_bytes(&self) -> &[u8; 32]

The raw 32-byte hash.

Source

pub fn detect_from_path(start: &Path) -> Result<Self, WorkspaceError>

Walk up from start looking for a .git/ directory and, on finding one, read origin remote URL from .git/config and hash it per WorkspaceId::from_git_remote.

Implements workspace-model.md § 3.3 step 1 (git-backed workspaces). Returns WorkspaceError::NoActiveWorkspace if the walk reaches the filesystem root without finding .git/.

§Errors

Trait Implementations§

Source§

impl Clone for WorkspaceId

Source§

fn clone(&self) -> WorkspaceId

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for WorkspaceId

Source§

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

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

impl Display for WorkspaceId

Source§

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

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

impl Hash for WorkspaceId

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for WorkspaceId

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for WorkspaceId

Source§

impl Eq for WorkspaceId

Source§

impl StructuralPartialEq for WorkspaceId

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<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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. 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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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