Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::fmt::Debug;
- pub trait THeader: Debug {
- fn m(&self) {
- println!("hello");
- }
- fn get_comparator(&self) -> &str;
- }
- #[derive(Clone, Copy, Debug, PartialEq, Eq)]
- struct THeader1;
- #[derive(Clone, Copy, Debug, PartialEq, Eq)]
- struct THeader2;
- impl THeader for THeader1
- {
- fn get_comparator(&self) -> &str {
- "header1"
- }
- }
- impl THeader for THeader2 {
- fn get_comparator(&self) -> &str {
- "header2"
- }
- }
- impl PartialEq<Box<THeader>> for Box<THeader> {
- fn eq(&self, other: &Box<THeader>) -> bool {
- self.get_comparator() == other.get_comparator()
- }
- }
- #[derive(Debug)]
- pub enum Header {
- H(Box<THeader>),
- }
- impl PartialEq<Header> for Header {
- fn eq(&self, other: &Header) -> bool {
- match self {
- Header::H(a) => match other {
- Header::H(b) => a.get_comparator() == b.get_comparator(),
- _ => false
- },
- _ => false
- }
- }
- }
- fn main()
- {
- let h1 = Header::H(Box::new(THeader1{}));
- let h2 = Header::H(Box::new(THeader2{}));
- if h1 == h2 {
- println!("eq");
- }
- }
Add Comment
Please, Sign In to add comment