diff options
| author | FenrirWolf <[email protected]> | 2018-04-21 16:39:03 -0600 |
|---|---|---|
| committer | GitHub <[email protected]> | 2018-04-21 16:39:03 -0600 |
| commit | 159b5b9e62ce074bbbd1900137670a9f5426a8bd (patch) | |
| tree | 4fecd0ca00b754c494e96b13e9837db48de93109 /ctr-std/src/termination.rs | |
| parent | Move more implementation details to `imp` module (diff) | |
| parent | Update for Rust nightly 2018-04-19 (diff) | |
| download | archived-ctru-rs-159b5b9e62ce074bbbd1900137670a9f5426a8bd.tar.xz archived-ctru-rs-159b5b9e62ce074bbbd1900137670a9f5426a8bd.zip | |
Merge pull request #64 from FenrirWolf/nightly-update
Update for Rust nightly 2018-04-19
Diffstat (limited to 'ctr-std/src/termination.rs')
| -rw-r--r-- | ctr-std/src/termination.rs | 80 |
1 files changed, 0 insertions, 80 deletions
diff --git a/ctr-std/src/termination.rs b/ctr-std/src/termination.rs deleted file mode 100644 index e4a577e..0000000 --- a/ctr-std/src/termination.rs +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2017 The Rust Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution and at -// http://rust-lang.org/COPYRIGHT. -// -// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or -// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license -// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -use error::Error; -// TODO: Add these consts to the libc crate for newlib -mod exit { - pub const SUCCESS: i32 = 0; - pub const FAILURE: i32 = 1; -} - -/// A trait for implementing arbitrary return types in the `main` function. -/// -/// The c-main function only supports to return integers as return type. -/// So, every type implementing the `Termination` trait has to be converted -/// to an integer. -/// -/// The default implementations are returning `libc::EXIT_SUCCESS` to indicate -/// a successful execution. In case of a failure, `libc::EXIT_FAILURE` is returned. -#[cfg_attr(not(test), lang = "termination")] -#[unstable(feature = "termination_trait", issue = "43301")] -#[rustc_on_unimplemented = - "`main` can only return types that implement {Termination}, not `{Self}`"] -pub trait Termination { - /// Is called to get the representation of the value as status code. - /// This status code is returned to the operating system. - fn report(self) -> i32; -} - -#[unstable(feature = "termination_trait", issue = "43301")] -impl Termination for () { - fn report(self) -> i32 { exit::SUCCESS } -} - -#[unstable(feature = "termination_trait", issue = "43301")] -impl<T: Termination, E: Error> Termination for Result<T, E> { - fn report(self) -> i32 { - match self { - Ok(val) => val.report(), - Err(err) => { - print_error(err); - exit::FAILURE - } - } - } -} - -#[unstable(feature = "termination_trait", issue = "43301")] -fn print_error<E: Error>(err: E) { - eprintln!("Error: {}", err.description()); - - if let Some(ref err) = err.cause() { - eprintln!("Caused by: {}", err.description()); - } -} - -#[unstable(feature = "termination_trait", issue = "43301")] -impl Termination for ! { - fn report(self) -> i32 { unreachable!(); } -} - -#[unstable(feature = "termination_trait", issue = "43301")] -impl Termination for bool { - fn report(self) -> i32 { - if self { exit::SUCCESS } else { exit::FAILURE } - } -} - -#[unstable(feature = "termination_trait", issue = "43301")] -impl Termination for i32 { - fn report(self) -> i32 { - self - } -} |