1*5225e6b1SAndroid Build Coastguard Worker // Copyright 2024, The Android Open Source Project 2*5225e6b1SAndroid Build Coastguard Worker // 3*5225e6b1SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License"); 4*5225e6b1SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License. 5*5225e6b1SAndroid Build Coastguard Worker // You may obtain a copy of the License at 6*5225e6b1SAndroid Build Coastguard Worker // 7*5225e6b1SAndroid Build Coastguard Worker // http://www.apache.org/licenses/LICENSE-2.0 8*5225e6b1SAndroid Build Coastguard Worker // 9*5225e6b1SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software 10*5225e6b1SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, 11*5225e6b1SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*5225e6b1SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and 13*5225e6b1SAndroid Build Coastguard Worker // limitations under the License. 14*5225e6b1SAndroid Build Coastguard Worker 15*5225e6b1SAndroid Build Coastguard Worker use core::fmt; 16*5225e6b1SAndroid Build Coastguard Worker use core::fmt::Debug; 17*5225e6b1SAndroid Build Coastguard Worker 18*5225e6b1SAndroid Build Coastguard Worker // smoltcp uses an old version of bitflag (1.0). The one imported at Android is newer and does not 19*5225e6b1SAndroid Build Coastguard Worker // provide Copy/Clone/Debug/PartialEq/Eq trait implementation by default. Thus we need to add the 20*5225e6b1SAndroid Build Coastguard Worker // implementation here. 21*5225e6b1SAndroid Build Coastguard Worker 22*5225e6b1SAndroid Build Coastguard Worker use crate::wire::{NdiscNeighborFlags, NdiscPrefixInfoFlags, NdiscRouterFlags}; 23*5225e6b1SAndroid Build Coastguard Worker 24*5225e6b1SAndroid Build Coastguard Worker macro_rules! bitflags_trait { 25*5225e6b1SAndroid Build Coastguard Worker ($name:ident) => { 26*5225e6b1SAndroid Build Coastguard Worker impl Copy for $name {} 27*5225e6b1SAndroid Build Coastguard Worker 28*5225e6b1SAndroid Build Coastguard Worker impl Clone for $name { 29*5225e6b1SAndroid Build Coastguard Worker fn clone(&self) -> $name { 30*5225e6b1SAndroid Build Coastguard Worker *self 31*5225e6b1SAndroid Build Coastguard Worker } 32*5225e6b1SAndroid Build Coastguard Worker } 33*5225e6b1SAndroid Build Coastguard Worker 34*5225e6b1SAndroid Build Coastguard Worker impl Debug for $name { 35*5225e6b1SAndroid Build Coastguard Worker fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { 36*5225e6b1SAndroid Build Coastguard Worker Debug::fmt(&self.bits(), f) 37*5225e6b1SAndroid Build Coastguard Worker } 38*5225e6b1SAndroid Build Coastguard Worker } 39*5225e6b1SAndroid Build Coastguard Worker 40*5225e6b1SAndroid Build Coastguard Worker impl PartialEq for $name { 41*5225e6b1SAndroid Build Coastguard Worker fn eq(&self, other: &Self) -> bool { 42*5225e6b1SAndroid Build Coastguard Worker PartialEq::eq(&self.bits(), &other.bits()) 43*5225e6b1SAndroid Build Coastguard Worker } 44*5225e6b1SAndroid Build Coastguard Worker } 45*5225e6b1SAndroid Build Coastguard Worker 46*5225e6b1SAndroid Build Coastguard Worker impl Eq for $name {} 47*5225e6b1SAndroid Build Coastguard Worker }; 48*5225e6b1SAndroid Build Coastguard Worker } 49*5225e6b1SAndroid Build Coastguard Worker 50*5225e6b1SAndroid Build Coastguard Worker bitflags_trait! {NdiscNeighborFlags} 51*5225e6b1SAndroid Build Coastguard Worker bitflags_trait! {NdiscRouterFlags} 52*5225e6b1SAndroid Build Coastguard Worker bitflags_trait! {NdiscPrefixInfoFlags} 53