core::fmt::Debug - Rust
Description: API documentation for the Rust `Debug` trait in crate `core`.
Keywords: rust, rustlang, rust-lang, Debug

# Trait core::fmt::Debug 1.0.0 [−] [src]

    pub trait Debug {
        fn fmt(&self, &mut Formatter) -> Result;
    }

Format trait for the `?` character.

`Debug` should format the output in a programmer-facing, debugging context.

Generally speaking, you should just `derive` a `Debug` implementation.

When used with the alternate format specifier `#?`, the output is pretty-printed.

For more information on formatters, see the module-level documentation.

This trait can be used with `#[derive]` if all fields implement `Debug`. When `derive`d for structs, it will use the name of the `struct`, then `{`, then a comma-separated list of each field's name and `Debug` value, then `}`. For `enum`s, it will use the name of the variant and, if applicable, `(`, then the `Debug` values of the fields, then `)`.

# Examples

Deriving an implementation:

    #[derive(Debug)]
    struct Point {
        x: i32,
        y: i32,
    }

    let origin = Point { x: 0, y: 0 };

    println!("The origin is: {:?}", origin);Run

Manually implementing:

    use std::fmt;

    struct Point {
        x: i32,
        y: i32,
    }

    impl fmt::Debug for Point {
        fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
            write!(f, "Point {{ x: {}, y: {} }}", self.x, self.y)
        }
    }

    let origin = Point { x: 0, y: 0 };

    println!("The origin is: {:?}", origin);Run

This outputs:

    The origin is: Point { x: 0, y: 0 }

There are a number of `debug_*` methods on `Formatter` to help you with manual implementations, such as `debug_struct`.

`Debug` implementations using either `derive` or the debug builder API on `Formatter` support pretty printing using the alternate flag: `{:#?}`.

Pretty printing with `#?`:

    #[derive(Debug)]
    struct Point {
        x: i32,
        y: i32,
    }

    let origin = Point { x: 0, y: 0 };

    println!("The origin is: {:#?}", origin);Run

This outputs:

    The origin is: Point {
        x: 0,
        y: 0
    }

## Required Methods

### `fn fmt(&self, &mut Formatter) -> Result`

Formats the value using the given formatter.

## Implementors

- `impl Debug for ParseFloatError`
- `impl<T: Debug> Debug for Wrapping<T>`
- `impl Debug for FpCategory`
- `impl Debug for TryFromIntError`
- `impl Debug for ParseIntError`
- `impl<T> Debug for Discriminant<T>`
- `impl<T: Debug + Zeroable> Debug for NonZero<T>`
- `impl<Ret> Debug for fn() -> Ret`
- `impl<Ret> Debug for extern fn() -> Ret`
- `impl<Ret> Debug for unsafe fn() -> Ret`
- `impl<Ret> Debug for unsafe extern fn() -> Ret`
- `impl<Ret, A> Debug for fn(A) -> Ret`
- `impl<Ret, A> Debug for extern fn(A) -> Ret`
- `impl<Ret, A> Debug for extern fn(A, ...) -> Ret`
- `impl<Ret, A> Debug for unsafe fn(A) -> Ret`
- `impl<Ret, A> Debug for unsafe extern fn(A) -> Ret`
- `impl<Ret, A> Debug for unsafe extern fn(A, ...) -> Ret`
- `impl<Ret, A, B> Debug for fn(A, B) -> Ret`
- `impl<Ret, A, B> Debug for extern fn(A, B) -> Ret`
- `impl<Ret, A, B> Debug for extern fn(A, B, ...) -> Ret`
- `impl<Ret, A, B> Debug for unsafe fn(A, B) -> Ret`
- `impl<Ret, A, B> Debug for unsafe extern fn(A, B) -> Ret`
- `impl<Ret, A, B> Debug for unsafe extern fn(A, B, ...) -> Ret`
- `impl<Ret, A, B, C> Debug for fn(A, B, C) -> Ret`
- `impl<Ret, A, B, C> Debug for extern fn(A, B, C) -> Ret`
- `impl<Ret, A, B, C> Debug for extern fn(A, B, C, ...) -> Ret`
- `impl<Ret, A, B, C> Debug for unsafe fn(A, B, C) -> Ret`
- `impl<Ret, A, B, C> Debug for unsafe extern fn(A, B, C) -> Ret`
- `impl<Ret, A, B, C> Debug for unsafe extern fn(A, B, C, ...) -> Ret`
- `impl<Ret, A, B, C, D> Debug for fn(A, B, C, D) -> Ret`
- `impl<Ret, A, B, C, D> Debug for extern fn(A, B, C, D) -> Ret`
- `impl<Ret, A, B, C, D> Debug for extern fn(A, B, C, D, ...) -> Ret`
- `impl<Ret, A, B, C, D> Debug for unsafe fn(A, B, C, D) -> Ret`
- `impl<Ret, A, B, C, D> Debug for unsafe extern fn(A, B, C, D) -> Ret`
- `impl<Ret, A, B, C, D> Debug for unsafe extern fn(A, B, C, D, ...) -> Ret`
- `impl<Ret, A, B, C, D, E> Debug for fn(A, B, C, D, E) -> Ret`
- `impl<Ret, A, B, C, D, E> Debug for extern fn(A, B, C, D, E) -> Ret`
- `impl<Ret, A, B, C, D, E> Debug for extern fn(A, B, C, D, E, ...) -> Ret`
- `impl<Ret, A, B, C, D, E> Debug for unsafe fn(A, B, C, D, E) -> Ret`
- `impl<Ret, A, B, C, D, E> Debug for unsafe extern fn(A, B, C, D, E) -> Ret`
- `impl<Ret, A, B, C, D, E> Debug for unsafe extern fn(A, B, C, D, E, ...) -> Ret`
- `impl<Ret, A, B, C, D, E, F> Debug for fn(A, B, C, D, E, F) -> Ret`
- `impl<Ret, A, B, C, D, E, F> Debug for extern fn(A, B, C, D, E, F) -> Ret`
- `impl<Ret, A, B, C, D, E, F> Debug for extern fn(A, B, C, D, E, F, ...) -> Ret`
- `impl<Ret, A, B, C, D, E, F> Debug for unsafe fn(A, B, C, D, E, F) -> Ret`
- `impl<Ret, A, B, C, D, E, F> Debug for unsafe extern fn(A, B, C, D, E, F) -> Ret`
- `impl<Ret, A, B, C, D, E, F> Debug for unsafe extern fn(A, B, C, D, E, F, ...) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G> Debug for fn(A, B, C, D, E, F, G) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G> Debug for extern fn(A, B, C, D, E, F, G) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G> Debug for extern fn(A, B, C, D, E, F, G, ...) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G> Debug for unsafe fn(A, B, C, D, E, F, G) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G> Debug for unsafe extern fn(A, B, C, D, E, F, G) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G> Debug for unsafe extern fn(A, B, C, D, E, F, G, ...) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H> Debug for fn(A, B, C, D, E, F, G, H) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H> Debug for extern fn(A, B, C, D, E, F, G, H) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H> Debug for extern fn(A, B, C, D, E, F, G, H, ...) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H> Debug for unsafe fn(A, B, C, D, E, F, G, H) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H> Debug for unsafe extern fn(A, B, C, D, E, F, G, H) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H> Debug for unsafe extern fn(A, B, C, D, E, F, G, H, ...) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I> Debug for fn(A, B, C, D, E, F, G, H, I) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I> Debug for extern fn(A, B, C, D, E, F, G, H, I) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I> Debug for extern fn(A, B, C, D, E, F, G, H, I, ...) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I> Debug for unsafe fn(A, B, C, D, E, F, G, H, I) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I> Debug for unsafe extern fn(A, B, C, D, E, F, G, H, I) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I> Debug for unsafe extern fn(A, B, C, D, E, F, G, H, I, ...) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J> Debug for fn(A, B, C, D, E, F, G, H, I, J) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J> Debug for extern fn(A, B, C, D, E, F, G, H, I, J) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J> Debug for extern fn(A, B, C, D, E, F, G, H, I, J, ...) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J> Debug for unsafe fn(A, B, C, D, E, F, G, H, I, J) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J> Debug for unsafe extern fn(A, B, C, D, E, F, G, H, I, J) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J> Debug for unsafe extern fn(A, B, C, D, E, F, G, H, I, J, ...) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J, K> Debug for fn(A, B, C, D, E, F, G, H, I, J, K) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J, K> Debug for extern fn(A, B, C, D, E, F, G, H, I, J, K) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J, K> Debug for extern fn(A, B, C, D, E, F, G, H, I, J, K, ...) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J, K> Debug for unsafe fn(A, B, C, D, E, F, G, H, I, J, K) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J, K> Debug for unsafe extern fn(A, B, C, D, E, F, G, H, I, J, K) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J, K> Debug for unsafe extern fn(A, B, C, D, E, F, G, H, I, J, K, ...) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J, K, L> Debug for fn(A, B, C, D, E, F, G, H, I, J, K, L) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J, K, L> Debug for extern fn(A, B, C, D, E, F, G, H, I, J, K, L) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J, K, L> Debug for extern fn(A, B, C, D, E, F, G, H, I, J, K, L, ...) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J, K, L> Debug for unsafe fn(A, B, C, D, E, F, G, H, I, J, K, L) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J, K, L> Debug for unsafe extern fn(A, B, C, D, E, F, G, H, I, J, K, L) -> Ret`
- `impl<Ret, A, B, C, D, E, F, G, H, I, J, K, L> Debug for unsafe extern fn(A, B, C, D, E, F, G, H, I, J, K, L, ...) -> Ret`
- `impl Debug for RangeFull`
- `impl<Idx: Debug> Debug for Range<Idx>`
- `impl<Idx: Debug> Debug for RangeFrom<Idx>`
- `impl<Idx: Debug> Debug for RangeTo<Idx>`
- `impl<Idx: Debug> Debug for RangeInclusive<Idx>`
- `impl<Idx: Debug> Debug for RangeToInclusive<Idx>`
- `impl Debug for Ordering`
- `impl Debug for Any`
- `impl Debug for Any + Send`
- `impl Debug for TypeId`
- `impl<T: Debug> Debug for [T; 0]`
- `impl<T: Debug> Debug for [T; 1]`
- `impl<T: Debug> Debug for [T; 2]`
- `impl<T: Debug> Debug for [T; 3]`
- `impl<T: Debug> Debug for [T; 4]`
- `impl<T: Debug> Debug for [T; 5]`
- `impl<T: Debug> Debug for [T; 6]`
- `impl<T: Debug> Debug for [T; 7]`
- `impl<T: Debug> Debug for [T; 8]`
- `impl<T: Debug> Debug for [T; 9]`
- `impl<T: Debug> Debug for [T; 10]`
- `impl<T: Debug> Debug for [T; 11]`
- `impl<T: Debug> Debug for [T; 12]`
- `impl<T: Debug> Debug for [T; 13]`
- `impl<T: Debug> Debug for [T; 14]`
- `impl<T: Debug> Debug for [T; 15]`
- `impl<T: Debug> Debug for [T; 16]`
- `impl<T: Debug> Debug for [T; 17]`
- `impl<T: Debug> Debug for [T; 18]`
- `impl<T: Debug> Debug for [T; 19]`
- `impl<T: Debug> Debug for [T; 20]`
- `impl<T: Debug> Debug for [T; 21]`
- `impl<T: Debug> Debug for [T; 22]`
- `impl<T: Debug> Debug for [T; 23]`
- `impl<T: Debug> Debug for [T; 24]`
- `impl<T: Debug> Debug for [T; 25]`
- `impl<T: Debug> Debug for [T; 26]`
- `impl<T: Debug> Debug for [T; 27]`
- `impl<T: Debug> Debug for [T; 28]`
- `impl<T: Debug> Debug for [T; 29]`
- `impl<T: Debug> Debug for [T; 30]`
- `impl<T: Debug> Debug for [T; 31]`
- `impl<T: Debug> Debug for [T; 32]`
- `impl Debug for Ordering`
- `impl Debug for AtomicI8`
- `impl Debug for AtomicU8`
- `impl Debug for AtomicI16`
- `impl Debug for AtomicU16`
- `impl Debug for AtomicI32`
- `impl Debug for AtomicU32`
- `impl Debug for AtomicI64`
- `impl Debug for AtomicU64`
- `impl Debug for AtomicIsize`
- `impl Debug for AtomicUsize`
- `impl Debug for AtomicBool`
- `impl<T> Debug for AtomicPtr<T>`
- `impl Debug for BorrowState`
- `impl Debug for BorrowError`
- `impl Debug for BorrowMutError`
- `impl Debug for CharTryFromError`
- `impl Debug for EscapeUnicode`
- `impl Debug for EscapeDefault`
- `impl Debug for EscapeDebug`
- `impl<I: Debug + Iterator<Item=u8>> Debug for DecodeUtf8<I>`
- `impl Debug for InvalidSequence`
- `impl<A: Debug, R: Debug> Debug for StepBy<A, R>`
- `impl<A: Debug> Debug for Repeat<A>`
- `impl<T> Debug for Empty<T>`
- `impl<T: Debug> Debug for Once<T>`
- `impl<T: Debug> Debug for Rev<T>`
- `impl<I: Debug> Debug for Cloned<I>`
- `impl<I: Debug> Debug for Cycle<I>`
- `impl<A: Debug, B: Debug> Debug for Chain<A, B>`
- `impl<A: Debug, B: Debug> Debug for Zip<A, B>`
- `impl<I: Debug, F> Debug for Map<I, F>`
- `impl<I: Debug, P> Debug for Filter<I, P>`
- `impl<I: Debug, F> Debug for FilterMap<I, F>`
- `impl<I: Debug> Debug for Enumerate<I>`
- `impl<I: Debug + Iterator> Debug for Peekable<I> where I::Item: Debug`
- `impl<I: Debug, P> Debug for SkipWhile<I, P>`
- `impl<I: Debug, P> Debug for TakeWhile<I, P>`
- `impl<I: Debug> Debug for Skip<I>`
- `impl<I: Debug> Debug for Take<I>`
- `impl<I: Debug, St: Debug, F> Debug for Scan<I, St, F>`
- `impl<I: Debug, U: IntoIterator, F> Debug for FlatMap<I, U, F> where U::IntoIter: Debug`
- `impl<I: Debug> Debug for Fuse<I>`
- `impl<I: Debug, F> Debug for Inspect<I, F>`
- `impl<T: Debug> Debug for Option<T>`
- `impl<'a, A: Debug + 'a> Debug for Iter<'a, A>`
- `impl<'a, A: Debug + 'a> Debug for IterMut<'a, A>`
- `impl<A: Debug> Debug for IntoIter<A>`
- `impl<T: Debug, E: Debug> Debug for Result<T, E>`
- `impl<'a, T: Debug + 'a> Debug for Iter<'a, T>`
- `impl<'a, T: Debug + 'a> Debug for IterMut<'a, T>`
- `impl<T: Debug> Debug for IntoIter<T>`
- `impl<'a, T: 'a + Debug> Debug for Iter<'a, T>`
- `impl<'a, T: 'a + Debug> Debug for IterMut<'a, T>`
- `impl<'a, T: 'a + Debug, P> Debug for Split<'a, T, P> where P: FnMut(&T) -> bool`
- `impl<'a, T: 'a + Debug, P> Debug for SplitMut<'a, T, P> where P: FnMut(&T) -> bool`
- `impl<'a, T: 'a + Debug, P> Debug for SplitN<'a, T, P> where P: FnMut(&T) -> bool`
- `impl<'a, T: 'a + Debug, P> Debug for RSplitN<'a, T, P> where P: FnMut(&T) -> bool`
- `impl<'a, T: 'a + Debug, P> Debug for SplitNMut<'a, T, P> where P: FnMut(&T) -> bool`
- `impl<'a, T: 'a + Debug, P> Debug for RSplitNMut<'a, T, P> where P: FnMut(&T) -> bool`
- `impl<'a, T: Debug + 'a> Debug for Windows<'a, T>`
- `impl<'a, T: Debug + 'a> Debug for Chunks<'a, T>`
- `impl<'a, T: Debug + 'a> Debug for ChunksMut<'a, T>`
- `impl Debug for SearchStep`
- `impl<'a> Debug for CharSearcher<'a>`
- `impl<'a, 'b> Debug for CharSliceSearcher<'a, 'b>`
- `impl<'a, F> Debug for CharPredicateSearcher<'a, F> where F: FnMut(char) -> bool`
- `impl<'a, 'b> Debug for StrSearcher<'a, 'b>`
- `impl Debug for ParseBoolError`
- `impl Debug for Utf8Error`
- `impl<'a> Debug for Chars<'a>`
- `impl<'a> Debug for CharIndices<'a>`
- `impl<'a> Debug for Bytes<'a>`
- `impl<'a, P: Pattern<'a>> Debug for Split<'a, P> where P::Searcher: Debug`
- `impl<'a, P: Pattern<'a>> Debug for RSplit<'a, P> where P::Searcher: Debug`
- `impl<'a, P: Pattern<'a>> Debug for SplitTerminator<'a, P> where P::Searcher: Debug`
- `impl<'a, P: Pattern<'a>> Debug for RSplitTerminator<'a, P> where P::Searcher: Debug`
- `impl<'a, P: Pattern<'a>> Debug for SplitN<'a, P> where P::Searcher: Debug`
- `impl<'a, P: Pattern<'a>> Debug for RSplitN<'a, P> where P::Searcher: Debug`
- `impl<'a, P: Pattern<'a>> Debug for MatchIndices<'a, P> where P::Searcher: Debug`
- `impl<'a, P: Pattern<'a>> Debug for RMatchIndices<'a, P> where P::Searcher: Debug`
- `impl<'a, P: Pattern<'a>> Debug for Matches<'a, P> where P::Searcher: Debug`
- `impl<'a, P: Pattern<'a>> Debug for RMatches<'a, P> where P::Searcher: Debug`
- `impl<'a> Debug for Lines<'a>`
- `impl<'a> Debug for LinesAny<'a>`
- `impl Debug for SipHasher13`
- `impl Debug for SipHasher24`
- `impl Debug for SipHasher`
- `impl<H> Debug for BuildHasherDefault<H>`
- `impl Debug for isize`
- `impl Debug for usize`
- `impl Debug for i8`
- `impl Debug for u8`
- `impl Debug for i16`
- `impl Debug for u16`
- `impl Debug for i32`
- `impl Debug for u32`
- `impl Debug for i64`
- `impl Debug for u64`
- `impl Debug for Alignment`
- `impl Debug for Error`
- `impl<'a> Debug for Arguments<'a>`
- `impl<'a, T: ?Sized + Debug> Debug for &'a T`
- `impl<'a, T: ?Sized + Debug> Debug for &'a mut T`
- `impl Debug for !`
- `impl Debug for bool`
- `impl Debug for str`
- `impl Debug for char`
- `impl Debug for f32`
- `impl Debug for f64`
- `impl<T: ?Sized> Debug for *const T`
- `impl<T: ?Sized> Debug for *mut T`
- `impl<T0: Debug, T1: Debug, T2: Debug, T3: Debug, T4: Debug, T5: Debug, T6: Debug, T7: Debug, T8: Debug, T9: Debug, T10: Debug, T11: Debug> Debug for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)`
- `impl<T1: Debug, T2: Debug, T3: Debug, T4: Debug, T5: Debug, T6: Debug, T7: Debug, T8: Debug, T9: Debug, T10: Debug, T11: Debug> Debug for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)`
- `impl<T2: Debug, T3: Debug, T4: Debug, T5: Debug, T6: Debug, T7: Debug, T8: Debug, T9: Debug, T10: Debug, T11: Debug> Debug for (T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)`
- `impl<T3: Debug, T4: Debug, T5: Debug, T6: Debug, T7: Debug, T8: Debug, T9: Debug, T10: Debug, T11: Debug> Debug for (T3, T4, T5, T6, T7, T8, T9, T10, T11)`
- `impl<T4: Debug, T5: Debug, T6: Debug, T7: Debug, T8: Debug, T9: Debug, T10: Debug, T11: Debug> Debug for (T4, T5, T6, T7, T8, T9, T10, T11)`
- `impl<T5: Debug, T6: Debug, T7: Debug, T8: Debug, T9: Debug, T10: Debug, T11: Debug> Debug for (T5, T6, T7, T8, T9, T10, T11)`
- `impl<T6: Debug, T7: Debug, T8: Debug, T9: Debug, T10: Debug, T11: Debug> Debug for (T6, T7, T8, T9, T10, T11)`
- `impl<T7: Debug, T8: Debug, T9: Debug, T10: Debug, T11: Debug> Debug for (T7, T8, T9, T10, T11)`
- `impl<T8: Debug, T9: Debug, T10: Debug, T11: Debug> Debug for (T8, T9, T10, T11)`
- `impl<T9: Debug, T10: Debug, T11: Debug> Debug for (T9, T10, T11)`
- `impl<T10: Debug, T11: Debug> Debug for (T10, T11)`
- `impl<T11: Debug> Debug for (T11,)`
- `impl<T: Debug> Debug for [T]`
- `impl Debug for ()`
- `impl<T: ?Sized> Debug for PhantomData<T>`
- `impl<T: Copy + Debug> Debug for Cell<T>`
- `impl<T: ?Sized + Debug> Debug for RefCell<T>`
- `impl<'b, T: ?Sized + Debug> Debug for Ref<'b, T>`
- `impl<'b, T: ?Sized + Debug> Debug for RefMut<'b, T>`
- `impl<T: ?Sized + Debug> Debug for UnsafeCell<T>`

# Help

## Keyboard Shortcuts

?
  Show this help dialog
S
  Focus the search field
⇤
  Move up in search results
⇥
  Move down in search results
⏎
  Go to active search result
+
  Collapse/expand all sections

## Search Tricks

Prefix searches with a type followed by a colon (e.g. `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g. `vec -> usize` or `* -> vec`)