xref: /aosp_15_r20/bootable/libbootloader/gbl/smoltcp/fixup.rs (revision 5225e6b173e52d2efc6bcf950c27374fd72adabc)
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