-#![allow(unused_imports)]
-#![allow(unreachable_pub)]
-#![allow(private_bounds)]
-#![allow(unused_variables)]
-
-use educe::Educe;
-use std::fmt::{self, Debug};
-use std::sync::Arc;
-
-trait Object {}
-
-impl Object for NotDebug {}
-
-#[derive(Educe)]
-#[educe(Clone(bound(T: Clone)), Debug(bound(T: Debug)))]
-//#[educe(Clone, Debug)]
-pub struct Obj<T: Object> {
- #[educe(Debug(ignore))]
- data: Arc<T>,
+#[derive(strum::EnumIter)]
+enum E {
+ Orange,
+ Lemon,
+ Apple,
}
-#[derive(Clone)]
-struct NotDebug;
+impl E {
+ fn is_citrus(&self) -> bool {
+ match self {
+ E::Orange | E::Lemon => true,
+ E::Apple => false,
+ }
+ }
+}
-fn main() {
- let a = Obj {
- data: Arc::new(NotDebug),
- };
- let a = Clone::clone(&a);
-// println!("{:?}", &a);
+pub fn all_citrus() {
+ E::iter().all(|e| e.is_citrus())
}