bad-optics/src/lib.rs

48 lines
1.0 KiB
Rust
Raw Permalink Normal View History

2021-11-12 13:09:23 +00:00
#![feature(unboxed_closures, fn_traits, const_trait_impl)]
2021-11-18 12:21:55 +00:00
#![allow(clippy::type_complexity)]
2021-11-05 14:22:59 +00:00
2021-11-12 12:44:20 +00:00
pub mod combinations;
2021-11-05 14:22:59 +00:00
mod fns;
2021-11-05 10:12:03 +00:00
pub mod lenses;
2021-11-05 19:35:26 +00:00
pub mod prisms;
2021-11-11 12:56:54 +00:00
pub mod traversals;
2021-11-12 12:44:20 +00:00
pub mod prelude {
2021-11-15 13:11:46 +00:00
pub use bad_optics_derive::Optics;
2021-11-12 12:44:20 +00:00
pub use crate::combinations::*;
pub use crate::lenses::*;
pub use crate::prisms::*;
pub use crate::traversals::*;
pub use crate::has_lens::*;
}
pub mod has_lens {
use crate::prelude::{lens::FuncLens, lens_with_ref::LensWithRef, to::ToRefInner};
use super::prelude::*;
pub trait HasLens {
type Lenses;
}
pub trait HasLensOf<T>: Sized {
fn get() -> Vec<Lens<LensWithRef<Lens<FuncLens<Self, T>>, Lens<ToRefInner<Self, T>>, Self>>>;
}
#[macro_export]
macro_rules! lens {
($name:ident :: $func:ident) => {
<$name as HasLens>::Lenses::$func()
};
}
#[macro_export]
macro_rules! lenses {
($name:ident :: $ty:ident) => {
<$name as HasLensOf<$ty>>::get()
};
}
2021-11-12 12:44:20 +00:00
}