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::*;
|
2022-01-17 15:34:20 +00:00
|
|
|
|
|
|
|
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
|
|
|
}
|