# 1.10.0[−][src]Struct core::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

    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

## Methods

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

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

🔬 This is a nightly-only experimental API. (`track_caller` #47809)

uses #[track_caller] which is not yet stable

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

    #![feature(track_caller)]
    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(), 15);
    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(), 29);
    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

    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

    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

    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`[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`[src]

Formats the value using the given formatter. Read more

## Auto Trait Implementations

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

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

### `impl<'a> Unpin 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`[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, U> TryFrom<U> for T where
U: Into<T>,` [src]

#### `type Error = !`

The type returned in the event of a conversion error.

#### `fn try_from(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.