std::panic::Location - Rust
Description: API documentation for the Rust `Location` struct in crate `std`.
Keywords: rust, rustlang, rust-lang, Location

# 1.10.0[−][src]Struct std::panic::Location

    #[lang = "panic_location"]pub struct Location<'a> { /* fields omitted */ }

A struct containing information about the location of a panic.

This structure is created by the `location` method of `PanicInfo`.

# Examples

ⓘThis example panics

    use std::panic;

    panic::set_hook(Box::new(|panic_info| {
        if let Some(location) = panic_info.location() {
            println!("panic occurred in file '{}' at line {}", location.file(), location.line());
        } else {
            println!("panic occurred but can't get location information...");
        }
    }));

    panic!("Normal panic");

Run

## Implementations

### `impl<'a> Location<'a>`[src]

#### `pub fn caller() -> &'static Location<'static>`1.46.0[src]

Returns the source location of the caller of this function. If that function's caller is annotated then its call location will be returned, and so on up the stack to the first call within a non-tracked function body.

# Examples

    use core::panic::Location;

    /// Returns the [`Location`] at which it is called.
    #[track_caller]
    fn get_caller_location() -> &'static Location<'static> {
        Location::caller()
    }

    /// Returns a [`Location`] from within this function's definition.
    fn get_just_one_location() -> &'static Location<'static> {
        get_caller_location()
    }

    let fixed_location = get_just_one_location();
    assert_eq!(fixed_location.file(), file!());
    assert_eq!(fixed_location.line(), 14);
    assert_eq!(fixed_location.column(), 5);

    // running the same untracked function in a different location gives us the same result
    let second_fixed_location = get_just_one_location();
    assert_eq!(fixed_location.file(), second_fixed_location.file());
    assert_eq!(fixed_location.line(), second_fixed_location.line());
    assert_eq!(fixed_location.column(), second_fixed_location.column());

    let this_location = get_caller_location();
    assert_eq!(this_location.file(), file!());
    assert_eq!(this_location.line(), 28);
    assert_eq!(this_location.column(), 21);

    // running the tracked function in a different location produces a different value
    let another_location = get_caller_location();
    assert_eq!(this_location.file(), another_location.file());
    assert_ne!(this_location.line(), another_location.line());
    assert_ne!(this_location.column(), another_location.column());

Run

### `impl<'a> Location<'a>`[src]

#### `pub fn file(&self) -> &str`[src]

Returns the name of the source file from which the panic originated.

# Examples

ⓘThis example panics

    use std::panic;

    panic::set_hook(Box::new(|panic_info| {
        if let Some(location) = panic_info.location() {
            println!("panic occurred in file '{}'", location.file());
        } else {
            println!("panic occurred but can't get location information...");
        }
    }));

    panic!("Normal panic");

Run

#### `pub fn line(&self) -> u32`[src]

Returns the line number from which the panic originated.

# Examples

ⓘThis example panics

    use std::panic;

    panic::set_hook(Box::new(|panic_info| {
        if let Some(location) = panic_info.location() {
            println!("panic occurred at line {}", location.line());
        } else {
            println!("panic occurred but can't get location information...");
        }
    }));

    panic!("Normal panic");

Run

#### `pub fn column(&self) -> u32`1.25.0[src]

Returns the column from which the panic originated.

# Examples

ⓘThis example panics

    use std::panic;

    panic::set_hook(Box::new(|panic_info| {
        if let Some(location) = panic_info.location() {
            println!("panic occurred at column {}", location.column());
        } else {
            println!("panic occurred but can't get location information...");
        }
    }));

    panic!("Normal panic");

Run

## Trait Implementations

### `impl<'a> Debug for Location<'a>`[src]

#### `fn fmt(&self, f: &mut Formatter) -> Result<(), Error>`[src]

Formats the value using the given formatter. Read more

### `impl<'_> Display for Location<'_>`1.26.0[src]

#### `fn fmt(&self, formatter: &mut Formatter) -> Result<(), Error>`[src]

Formats the value using the given formatter. Read more

## Auto Trait Implementations

### `impl<'a> RefUnwindSafe for Location<'a>`

### `impl<'a> Send for Location<'a>`

### `impl<'a> Sync for Location<'a>`

### `impl<'a> Unpin for Location<'a>`

### `impl<'a> UnwindSafe for Location<'a>`

## Blanket Implementations

### `impl<T> Any for T where
T: 'static + ?Sized,` [src]

#### `fn type_id(&self) -> TypeId`[src]

Gets the `TypeId` of `self`. Read more

### `impl<T> Borrow<T> for T where
T: ?Sized,` [src]

#### `fn borrow(&self) -> &T`[src]

Immutably borrows from an owned value. Read more

### `impl<T> BorrowMut<T> for T where
T: ?Sized,` [src]

#### `fn borrow_mut(&mut self) -> &mut T`[src]

Mutably borrows from an owned value. Read more

### `impl<T> From<T> for T`[src]

#### `fn from(t: T) -> T`[src]

Performs the conversion.

### `impl<T, U> Into<U> for T where
U: From<T>,` [src]

#### `fn into(self) -> U`[src]

Performs the conversion.

### `impl<T> ToString for T where
T: Display + ?Sized,` [src]

#### `default fn to_string(&self) -> String`[src]

Converts the given value to a `String`. Read more

### `impl<T, U> TryFrom<U> for T where
U: Into<T>,` [src]

#### `type Error = Infallible`

The type returned in the event of a conversion error.

#### `fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>`[src]

Performs the conversion.

### `impl<T, U> TryInto<U> for T where
U: TryFrom<T>,` [src]

#### `type Error = <U as TryFrom<T>>::Error`

The type returned in the event of a conversion error.

#### `fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>`[src]

Performs the conversion.