Skip to main content

SymbolicRefs

Struct SymbolicRefs 

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

Maintains an acyclic set of symbolic references. Note that dangling references are not detected.

Internally, targets are stored as Target, which distinguishes direct (qualified) targets from symbolic (intermediate) ones. This means resolution and cycle-checking can pattern-match on the variant rather than re-parsing the string.

§Deserialization Order

Deserialization validates entries in iteration order via TryFrom<IndexMap>. This means deserialization only succeeds if symbolic reference whose target is another symbolic reference appears after that target in the JSON. For example, {"MAIN": "refs/heads/master", "HEAD": "MAIN"} is valid, but {"HEAD": "MAIN", "MAIN": "refs/heads/master"} is not.

To ensure that serialization and deserialization are inverses, we must ensure that insertion order and iteration order are the same. We do this by using IndexMap internally, which preserves this property, and enabling the feature preserve_order of the serde_json crate.

Normally, JSON objects are unordered (see RFC 8259, Sec. 4). Any compatible (de-)serializer must preserve key order.

Implementations§

Source§

impl SymbolicRefs

Read-only access.

Source

pub fn iter(&self) -> impl Iterator<Item = (&RefString, &Target)>

Returns an iterator over all contained symbolic references, as pairs of their name and Target.

Source

pub fn iter_resolved( &self, ) -> impl Iterator<Item = (&RefString, &Qualified<'static>)>

Returns an iterator over all contained symbolic references that resolve to a direct (qualified) target. The yielded target is the final Qualified reference after chasing through any intermediate symbolic references.

Source

pub fn is_empty(&self) -> bool

Returns true if the set of symbolic references is empty.

Source§

impl SymbolicRefs

Utilities for handling of HEAD.

Source

pub fn head(branch_name: &RefString) -> SymbolicRefs

Construct SymbolicRefs for the single symbolic reference HEAD targeting /refs/heads/<branch_name>.

Source

pub fn resolve_head(&self) -> Option<&Qualified<'static>>

Convenience method to get the resolved target of the HEAD reference. Returns the final Qualified reference after chasing the chain. See also SymbolicRefs::head.

Source§

impl SymbolicRefs

Mutability.

Source

pub fn combine(&mut self, other: SymbolicRefs) -> Result<(), InsertionError>

Consume other by iteratively inserting into self.

Trait Implementations§

Source§

impl Clone for SymbolicRefs

Source§

fn clone(&self) -> SymbolicRefs

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 SymbolicRefs

Source§

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

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

impl Default for SymbolicRefs

Source§

fn default() -> SymbolicRefs

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for SymbolicRefs

Source§

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

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

impl PartialEq for SymbolicRefs

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · 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 Serialize for SymbolicRefs

Source§

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

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

impl TryFrom<IndexMap<Unprotected<RefString>, Unprotected<RefString>>> for SymbolicRefs

Source§

type Error = InsertionError

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

fn try_from( map: IndexMap<Unprotected<RefString>, Unprotected<RefString>>, ) -> Result<SymbolicRefs, <SymbolicRefs as TryFrom<IndexMap<Unprotected<RefString>, Unprotected<RefString>>>>::Error>

Performs the conversion.
Source§

impl Eq for SymbolicRefs

Source§

impl StructuralPartialEq for SymbolicRefs

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

Source§

fn __clone_box(&self, _: Private) -> *mut ()

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, 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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Serialize for T
where T: Serialize + ?Sized,

Source§

fn erased_serialize(&self, serializer: &mut dyn Serializer) -> Result<(), Error>

Source§

fn do_erased_serialize( &self, serializer: &mut dyn Serializer, ) -> Result<(), ErrorImpl>

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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

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