* The lint visitor's visit_ty method did not recurse, and had a reference to the now closed #10894 * The newly enabled recursion has only affected the `deprectated` lint which now detects uses of deprecated items in trait impls and function return types * Renamed some references to `CowString` and `CowVec` to `Cow<str>` and `Cow<[T]>`, respectively, which appear outside of the crate which defines them * Replaced a few instances of `InvariantType<T>` with `PhantomData<Cell<T>>` * Disabled the `deprecated` lint in several places that reference/implement traits on deprecated items which will get cleaned up in the future * Disabled the `exceeding_bitshifts` lint for compile-fail/huge-array-simple test so it doesn't shadow the expected error on 32bit systems * Unfortunately, this means that if a library declares `#![deny(deprecated)]` and marks anything as deprecated, it will have to disable the lint for any uses of said item, e.g. any impl the now deprecated item For any library that denies deprecated items but has deprecated items of its own, this is a [breaking-change]
88 lines
2.1 KiB
Rust
88 lines
2.1 KiB
Rust
// Copyright 2015 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.
|
|
|
|
/// The underlying OsString/OsStr implementation on Unix systems: just
|
|
/// a `Vec<u8>`/`[u8]`.
|
|
|
|
use core::prelude::*;
|
|
|
|
use borrow::Cow;
|
|
use fmt::{self, Debug};
|
|
use vec::Vec;
|
|
use slice::SliceExt as StdSliceExt;
|
|
use str;
|
|
use string::String;
|
|
use mem;
|
|
|
|
#[derive(Clone, Hash)]
|
|
pub struct Buf {
|
|
pub inner: Vec<u8>
|
|
}
|
|
|
|
pub struct Slice {
|
|
pub inner: [u8]
|
|
}
|
|
|
|
impl Debug for Slice {
|
|
fn fmt(&self, formatter: &mut fmt::Formatter) -> Result<(), fmt::Error> {
|
|
self.to_string_lossy().fmt(formatter)
|
|
}
|
|
}
|
|
|
|
impl Debug for Buf {
|
|
fn fmt(&self, formatter: &mut fmt::Formatter) -> Result<(), fmt::Error> {
|
|
self.as_slice().fmt(formatter)
|
|
}
|
|
}
|
|
|
|
impl Buf {
|
|
pub fn from_string(s: String) -> Buf {
|
|
Buf { inner: s.into_bytes() }
|
|
}
|
|
|
|
pub fn from_str(s: &str) -> Buf {
|
|
Buf { inner: s.as_bytes().to_vec() }
|
|
}
|
|
|
|
pub fn as_slice(&self) -> &Slice {
|
|
unsafe { mem::transmute(&*self.inner) }
|
|
}
|
|
|
|
pub fn into_string(self) -> Result<String, Buf> {
|
|
String::from_utf8(self.inner).map_err(|p| Buf { inner: p.into_bytes() } )
|
|
}
|
|
|
|
pub fn push_slice(&mut self, s: &Slice) {
|
|
self.inner.push_all(&s.inner)
|
|
}
|
|
}
|
|
|
|
impl Slice {
|
|
fn from_u8_slice(s: &[u8]) -> &Slice {
|
|
unsafe { mem::transmute(s) }
|
|
}
|
|
|
|
pub fn from_str(s: &str) -> &Slice {
|
|
unsafe { mem::transmute(s.as_bytes()) }
|
|
}
|
|
|
|
pub fn to_str(&self) -> Option<&str> {
|
|
str::from_utf8(&self.inner).ok()
|
|
}
|
|
|
|
pub fn to_string_lossy(&self) -> Cow<str> {
|
|
String::from_utf8_lossy(&self.inner)
|
|
}
|
|
|
|
pub fn to_owned(&self) -> Buf {
|
|
Buf { inner: self.inner.to_vec() }
|
|
}
|
|
}
|