Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

bobozaur/transitive

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

56 Commits

Repository files navigation

Crates.io

transitive

Transitive converions through derive macros for Rust.

Rationale:

Assume you have types A, B and C with the following, already implemented, conversions:

  • A -> B
  • B -> C

Sometimes it might be desirable to have an A -> C implementation which could easily be represented as A -> B -> C.

That is precisely what this crate does. Through the Transitive derive macro, it will implement From or TryFrom respectively for converting from/to the derived type and a target type, given a path of transitions to go through.

use transitive::Transitive;
#[derive(Transitive)]
#[transitive(into(B, C, D))] // impl From<A> for D by doing A -> B -> C -> D
struct A;
#[derive(Transitive)]
#[transitive(into(C, D))] // impl From<B> for D by doing B -> C -> D
struct B;
struct C;
struct D;
impl From<A> for B {
 fn from(val: A) -> Self {
 Self
 }
};
impl From<B> for C {
 fn from(val: B) -> Self {
 Self
 }
};
impl From<C> for D {
 fn from(val: C) -> Self {
 Self
 }
};
#[test]
fn into() {
 D::from(A);
 D::from(B);
}

More examples and explanations can be found in the documentation.

License

Licensed under MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT).

Contributing

Contributions to this repository, unless explicitly stated otherwise, will be considered licensed under MIT. Bugs/issues encountered can be opened here.

About

Transitive derive macros for Rust

Resources

License

Stars

Watchers

Forks

Packages

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /