traitobject-0.1.1/.cargo_vcs_info.json0000644000000001360000000000100133450ustar { "git": { "sha1": "a501f0e2c0ab1990eb4791048be4df1615ad459d" }, "path_in_vcs": "" }traitobject-0.1.1/.gitignore000064400000000000000000000002071046102023000141240ustar 00000000000000.DS_Store *~ *# *.o *.so *.swp *.dylib *.dSYM *.dll *.rlib *.dummy *.exe *-test /doc/ /target/ /examples/* !/examples/*.rs Cargo.lock traitobject-0.1.1/.travis.yml000064400000000000000000000010751046102023000142510ustar 00000000000000language: rust sudo: false script: - cargo build - cargo test - cargo bench --no-run - cargo doc after_success: - if [ "$TRAVIS_PULL_REQUEST" == false && test == "TRAVIS_BRANCH" == "master" ]; then - curl https://raw.githubusercontent.com/reem/rust-gh-docs/master/make-docs.sh > docs.sh - chmod u+x docs.sh - ./docs.sh reem project-name env: global: secure: QPYL1XUr4CyK/2DXlsYC1eCpWRpyEiqQSd/FFVR+YdP/rOJ7AyAXQqPhfgjDBQwvc6E2fUiyYjoV/xe1a757DDeZKlgd8Lp20fSDwvNt/Ejx8ueh3h3kuOtgDpIGSKX/l+XC+ltDpzjhh7bowI2/fOEf+kE53jvu9i4PiLnKdlY= traitobject-0.1.1/Cargo.lock0000644000000002330000000000100113160ustar # This file is automatically @generated by Cargo. # It is not intended for manual editing. version = 4 [[package]] name = "traitobject" version = "0.1.1" traitobject-0.1.1/Cargo.toml0000644000000016240000000000100113460ustar # THIS FILE IS AUTOMATICALLY GENERATED BY CARGO # # When uploading crates to the registry Cargo will automatically # "normalize" Cargo.toml files for maximal compatibility # with all versions of Cargo and also rewrite `path` dependencies # to registry (e.g., crates.io) dependencies. # # If you are reading this file be aware that the original Cargo.toml # will likely look very different (and much more reasonable). # See Cargo.toml.orig for the original contents. [package] edition = "2021" name = "traitobject" version = "0.1.1" authors = ["Jonathan Reem "] build = false autolib = false autobins = false autoexamples = false autotests = false autobenches = false description = "Unsafe helpers for working with raw trait objects." readme = "README.md" license = "MIT/Apache-2.0" repository = "https://github.com/reem/rust-traitobject.git" [lib] name = "traitobject" path = "src/lib.rs" traitobject-0.1.1/Cargo.toml.orig000064400000000000000000000004501046102023000150230ustar 00000000000000[package] name = "traitobject" version = "0.1.1" authors = ["Jonathan Reem "] repository = "https://github.com/reem/rust-traitobject.git" description = "Unsafe helpers for working with raw trait objects." readme = "README.md" license = "MIT/Apache-2.0" edition = "2021" traitobject-0.1.1/README.md000064400000000000000000000005561046102023000134220ustar 00000000000000# traitobject > Unsafe helpers for dealing with raw trait objects. ## Usage Use the crates.io repository; add this to your `Cargo.toml` along with the rest of your dependencies: ```toml [dependencies] traitobject = "0.1" ``` ## Author [Jonathan Reem](https://medium.com/@jreem) is the primary author and maintainer of traitobject. ## License MIT/Apache-2.0 traitobject-0.1.1/src/impls.rs000064400000000000000000000106241046102023000144210ustar 00000000000000use super::Trait; unsafe impl Trait for dyn ::std::any::Any + Send {} unsafe impl Trait for dyn ::std::any::Any + Sync {} unsafe impl Trait for dyn ::std::any::Any + Send + Sync {} unsafe impl Trait for dyn ::std::borrow::Borrow + Send {} unsafe impl Trait for dyn ::std::borrow::Borrow + Sync {} unsafe impl Trait for dyn ::std::borrow::Borrow + Send + Sync {} unsafe impl Trait for dyn ::std::borrow::BorrowMut + Send {} unsafe impl Trait for dyn ::std::borrow::BorrowMut + Sync {} unsafe impl Trait for dyn ::std::borrow::BorrowMut + Send + Sync {} unsafe impl Trait for dyn ::std::convert::AsMut + Send {} unsafe impl Trait for dyn ::std::convert::AsMut + Sync {} unsafe impl Trait for dyn ::std::convert::AsMut + Send + Sync {} unsafe impl Trait for dyn ::std::convert::AsRef + Send {} unsafe impl Trait for dyn ::std::convert::AsRef + Sync {} unsafe impl Trait for dyn ::std::convert::AsRef + Send + Sync {} unsafe impl Trait for dyn ::std::error::Error + Send {} unsafe impl Trait for dyn ::std::error::Error + Sync {} unsafe impl Trait for dyn ::std::error::Error + Send + Sync {} unsafe impl Trait for dyn ::std::fmt::Binary + Send {} unsafe impl Trait for dyn ::std::fmt::Binary + Sync {} unsafe impl Trait for dyn ::std::fmt::Binary + Send + Sync {} unsafe impl Trait for dyn ::std::fmt::Debug + Send {} unsafe impl Trait for dyn ::std::fmt::Debug + Sync {} unsafe impl Trait for dyn ::std::fmt::Debug + Send + Sync {} unsafe impl Trait for dyn ::std::fmt::Display + Send {} unsafe impl Trait for dyn ::std::fmt::Display + Sync {} unsafe impl Trait for dyn ::std::fmt::Display + Send + Sync {} unsafe impl Trait for dyn ::std::fmt::LowerExp + Send {} unsafe impl Trait for dyn ::std::fmt::LowerExp + Sync {} unsafe impl Trait for dyn ::std::fmt::LowerExp + Send + Sync {} unsafe impl Trait for dyn ::std::fmt::LowerHex + Send {} unsafe impl Trait for dyn ::std::fmt::LowerHex + Sync {} unsafe impl Trait for dyn ::std::fmt::LowerHex + Send + Sync {} unsafe impl Trait for dyn ::std::fmt::Octal + Send {} unsafe impl Trait for dyn ::std::fmt::Octal + Sync {} unsafe impl Trait for dyn ::std::fmt::Octal + Send + Sync {} unsafe impl Trait for dyn ::std::fmt::Pointer + Send {} unsafe impl Trait for dyn ::std::fmt::Pointer + Sync {} unsafe impl Trait for dyn ::std::fmt::Pointer + Send + Sync {} unsafe impl Trait for dyn ::std::fmt::UpperExp + Send {} unsafe impl Trait for dyn ::std::fmt::UpperExp + Sync {} unsafe impl Trait for dyn ::std::fmt::UpperExp + Send + Sync {} unsafe impl Trait for dyn ::std::fmt::UpperHex + Send {} unsafe impl Trait for dyn ::std::fmt::UpperHex + Sync {} unsafe impl Trait for dyn ::std::fmt::UpperHex + Send + Sync {} unsafe impl Trait for dyn ::std::fmt::Write + Send {} unsafe impl Trait for dyn ::std::fmt::Write + Sync {} unsafe impl Trait for dyn ::std::fmt::Write + Send + Sync {} unsafe impl Trait for dyn ::std::hash::Hasher + Send {} unsafe impl Trait for dyn ::std::hash::Hasher + Sync {} unsafe impl Trait for dyn ::std::hash::Hasher + Send + Sync {} unsafe impl Trait for dyn ::std::io::BufRead + Send {} unsafe impl Trait for dyn ::std::io::BufRead + Sync {} unsafe impl Trait for dyn ::std::io::BufRead + Send + Sync {} unsafe impl Trait for dyn ::std::io::Read + Send {} unsafe impl Trait for dyn ::std::io::Read + Sync {} unsafe impl Trait for dyn ::std::io::Read + Send + Sync {} unsafe impl Trait for dyn ::std::io::Seek + Send {} unsafe impl Trait for dyn ::std::io::Seek + Sync {} unsafe impl Trait for dyn ::std::io::Seek + Send + Sync {} unsafe impl Trait for dyn ::std::io::Write + Send {} unsafe impl Trait for dyn ::std::io::Write + Sync {} unsafe impl Trait for dyn ::std::io::Write + Send + Sync {} unsafe impl Trait for dyn (::std::iter::IntoIterator) {} unsafe impl Trait for dyn ::std::iter::Iterator + Send {} unsafe impl Trait for dyn ::std::iter::Iterator + Sync {} unsafe impl Trait for dyn ::std::iter::Iterator + Send + Sync {} unsafe impl Trait for dyn ::std::marker::Send + Send {} unsafe impl Trait for dyn ::std::marker::Send + Sync {} unsafe impl Trait for dyn ::std::marker::Sync + Sync {} unsafe impl Trait for dyn ::std::string::ToString + Send {} unsafe impl Trait for dyn ::std::string::ToString + Sync {} unsafe impl Trait for dyn ::std::string::ToString + Send + Sync {} traitobject-0.1.1/src/lib.rs000064400000000000000000000015101046102023000140350ustar 00000000000000#![cfg_attr(test, deny(warnings))] #![deny(missing_docs)] //! # traitobject //! //! Unsafe helpers for working with raw TraitObjects. /// Get the data pointer from this trait object. /// /// Highly unsafe, as there is no information about the type of the data. pub unsafe fn data(val: *const T) -> *const () { val as *const () } /// Get the data pointer from this trait object, mutably. /// /// Highly unsafe, as there is no information about the type of the data. pub unsafe fn data_mut(val: *mut T) -> *mut () { val as *mut () } #[test] fn test_simple() { let x = &7 as &dyn Send; unsafe { assert!(&7 == std::mem::transmute::<_, &i32>(data(x))) }; } /// A trait implemented for all trait objects. /// /// Implementations for all traits in std are provided. pub unsafe trait Trait {} mod impls;