1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
// Copyright 2015-2016 Brian Smith. // // Permission to use, copy, modify, and/or distribute this software for any // purpose with or without fee is hereby granted, provided that the above // copyright notice and this permission notice appear in all copies. // // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR // ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. //! Conversions into the library's time type. #[cfg(feature = "std")] use {ring, std}; /// The time type. /// /// Internally this is merely a UNIX timestamp: a count of non-leap /// seconds since the start of 1970. This type exists to assist /// unit-of-measure correctness. #[derive(Debug, Clone, Copy, PartialEq, PartialOrd)] pub struct Time(u64); impl Time { /// Create a `webpki::Time` from a `std::time::SystemTime`. /// /// This will be replaced with a real `TryFrom<std::time::SystemTime>` /// implementation when `TryFrom` is added to Rust Stable. /// /// # Example: /// /// Construct a `webpki::Time` from the current system time: /// /// ``` /// # extern crate ring; /// # extern crate webpki; /// # /// #[cfg(feature = "std")] /// # fn foo() -> Result<(), ring::error::Unspecified> { /// let time = webpki::Time::try_from(std::time::SystemTime::now())?; /// # Ok(()) /// # } /// ``` #[cfg(feature = "std")] pub fn try_from(time: std::time::SystemTime) -> Result<Time, ring::error::Unspecified> { time.duration_since(std::time::UNIX_EPOCH) .map(|d| Time::from_seconds_since_unix_epoch(d.as_secs())) .map_err(|_| ring::error::Unspecified) } /// Create a `webpki::Time` from a unix timestamp. /// /// It is usually better to use the less error-prone /// `webpki::Time::try_from(time: &std::time::SystemTime)` instead when /// `std::time::SystemTime` is available (when `#![no_std]` isn't being /// used). pub fn from_seconds_since_unix_epoch(secs: u64) -> Time { Time(secs) } }