wlan_common/mac/mgmt/
status.rs

1// Copyright 2019 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5use fidl_fuchsia_wlan_ieee80211 as fidl_ieee80211;
6use zerocopy::{FromBytes, Immutable, IntoBytes, KnownLayout};
7
8#[repr(C)]
9#[derive(
10    IntoBytes, KnownLayout, FromBytes, Immutable, PartialEq, Eq, Clone, Copy, Debug, Default,
11)]
12pub struct StatusCode(pub u16);
13
14impl StatusCode {
15    pub fn into_fidl_or_refused_unspecified(self) -> fidl_ieee80211::StatusCode {
16        self.try_into().unwrap_or(fidl_ieee80211::StatusCode::RefusedReasonUnspecified)
17    }
18}
19
20impl From<fidl_ieee80211::StatusCode> for StatusCode {
21    fn from(fidl_status_code: fidl_ieee80211::StatusCode) -> StatusCode {
22        StatusCode(fidl_status_code as u16)
23    }
24}
25
26// TODO(https://fxbug.dev/42080459): Replace uses of this `From` implementation with `TryFrom` and then
27//                         remove this.
28impl From<StatusCode> for Option<fidl_ieee80211::StatusCode> {
29    fn from(status_code: StatusCode) -> Option<fidl_ieee80211::StatusCode> {
30        fidl_ieee80211::StatusCode::from_primitive(status_code.0)
31    }
32}
33
34impl TryFrom<StatusCode> for fidl_ieee80211::StatusCode {
35    type Error = ();
36
37    fn try_from(status: StatusCode) -> Result<fidl_ieee80211::StatusCode, ()> {
38        fidl_ieee80211::StatusCode::from_primitive(status.0).ok_or(())
39    }
40}