diff --git a/crates.js b/crates.js index 6cf8f09b..c9a5520d 100644 --- a/crates.js +++ b/crates.js @@ -1 +1 @@ -window.ALL_CRATES = ["echonet"]; \ No newline at end of file +window.ALL_CRATES = ["echonet","uechobench","uechopost","uechosearch"]; \ No newline at end of file diff --git a/echonet/all.html b/echonet/all.html index 02ca6cd9..8a0ed65b 100644 --- a/echonet/all.html +++ b/echonet/all.html @@ -1 +1,2 @@ -List of all items in this crate

List of all items

Structs

Enums

Traits

Type Definitions

Constants

\ No newline at end of file +List of all items in this crate +

List of all items

Structs

Enums

Traits

Type Aliases

Constants

\ No newline at end of file diff --git a/echonet/enum.PropertyRule.html b/echonet/enum.PropertyRule.html index cdcfd8cd..ad3e08ad 100644 --- a/echonet/enum.PropertyRule.html +++ b/echonet/enum.PropertyRule.html @@ -1,17 +1,18 @@ -PropertyRule in echonet - Rust
pub enum PropertyRule {
-    Prohibited,
-    Required,
-    Optional,
+PropertyRule in echonet - Rust
+    
pub enum PropertyRule {
+    Prohibited = 0,
+    Required = 1,
+    Optional = 2,
 }
Expand description

PropertyRule represents an ECHONET-Lite property access rule.

-

Variants§

§

Prohibited

§

Required

§

Optional

Trait Implementations§

source§

impl Clone for PropertyRule

source§

fn clone(&self) -> PropertyRule

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Copy for PropertyRule

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

Variants§

§

Prohibited = 0

§

Required = 1

§

Optional = 2

Trait Implementations§

source§

impl Clone for PropertyRule

source§

fn clone(&self) -> PropertyRule

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Copy for PropertyRule

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for T
where + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/echonet/index.html b/echonet/index.html index 06b3e22d..482a8b37 100644 --- a/echonet/index.html +++ b/echonet/index.html @@ -1,6 +1,8 @@ -echonet - Rust

Crate echonet

source ·
Expand description

echonet (uecho-rs)

+echonet - Rust +

Crate echonet

source ·
Expand description

§echonet (uecho-rs)

The uecho-rs is a portable and cross-platform development framework for creating controller applications and devices of ECHONET-Lite for Rust developers. ECHONET-Lite is an open standard specification for IoT devices in Japan, it specifies more than 100 IoT devices such as crime prevention sensors, air conditioners and refrigerators.

-

What is uEcho ?

+

§What is uEcho ?

To implement IoT controllers or devices of ECHONET-Lite, the developer had to understand and implement the communication middleware specification such as the message format and base sequences.

The uecho-rs provides the following major components to control ECHONET-Lite devices and create the standard specification devices.

The uecho-rs handles all ECHONET-Lite requests such as read, write and notification requests automatically. Therefore, Rust developers can implement the standard device and controller applications using the uecho-rs easily by simply implementing the request message validators.

-

Getting Started

+

§Getting Started

The examples are available for ECHONET-Lite controller and device implementations using the uecho-rs, check out the examples folder in GitHub.

-

Table of Contents

+

§Table of Contents

Modules

  • Logger function module.
  • messaging packet encoder and decoder module.
  • Messaging transport manager module (Internal).
  • Utility function module.

Structs

  • Controller represents an ECHONET-Lite controller node to communicate other ECHONET-Lite nodes.
  • Device represents an ECHONET-Lite device node. The device is created with a standard device object code, and the object is automatically added the standard properties which are specified in APPENDIX Detailed Requirements for ECHONET Device Objects by the ECHONET Consortium.
  • Manufacture represents a manufacturer name and code registerd by the ECHONET CONSORTIUM.
  • Node represents an ECHONET-Lite node which contains ECHONET-Lite objects such the profiles and the devices.
  • Each ECHONET-Lite node has objects. Object represents an ECHONET-Lite Object in an ECHONET-Lite node.
  • Each ECHONET-Lite object has properties. Property represents an ECHONET-Lite property in an ECHONET-Lite object.
  • PropertyEnum represents an ECHONET-Lite property enumerated data.
  • RemoteNode represents an ECHONET-Lite node discovered by Controller. The remote node has the standard objects and properties defined by the ECHONET CONSORTIUM.
  • StandardDatabase provides a standard database for ECHONET-Lite device objects and manufactures. This standard database was generated by importing Machine Readable Appendix and Manufacturer code List provided by the ECHONET Consortium.

Enums

  • PropertyRule represents an ECHONET-Lite property access rule.

Traits

  • RequestHandler defines a request message handler interface.

Type Definitions

  • ManufactureCode represents a manufacturer code registerd by the ECHONET CONSORTIUM.
  • ObjectCode represents an ECHONET-Lite object code.
  • RequestHandlerObject represents a request message handler object.
\ No newline at end of file +

Modules§

  • Logger function module.
  • messaging packet encoder and decoder module.
  • Messaging transport manager module (Internal).
  • Utility function module.

Structs§

  • Controller represents an ECHONET-Lite controller node to communicate other ECHONET-Lite nodes.
  • Device represents an ECHONET-Lite device node. The device is created with a standard device object code, and the object is automatically added the standard properties which are specified in APPENDIX Detailed Requirements for ECHONET Device Objects by the ECHONET Consortium.
  • Manufacture represents a manufacturer name and code registerd by the ECHONET CONSORTIUM.
  • Node represents an ECHONET-Lite node which contains ECHONET-Lite objects such the profiles and the devices.
  • Each ECHONET-Lite node has objects. Object represents an ECHONET-Lite Object in an ECHONET-Lite node.
  • Each ECHONET-Lite object has properties. Property represents an ECHONET-Lite property in an ECHONET-Lite object.
  • PropertyEnum represents an ECHONET-Lite property enumerated data.
  • RemoteNode represents an ECHONET-Lite node discovered by Controller. The remote node has the standard objects and properties defined by the ECHONET CONSORTIUM.
  • StandardDatabase provides a standard database for ECHONET-Lite device objects and manufactures. This standard database was generated by importing Machine Readable Appendix and Manufacturer code List provided by the ECHONET Consortium.

Enums§

  • PropertyRule represents an ECHONET-Lite property access rule.

Traits§

  • RequestHandler defines a request message handler interface.

Type Aliases§

  • ManufactureCode represents a manufacturer code registerd by the ECHONET CONSORTIUM.
  • ObjectCode represents an ECHONET-Lite object code.
  • RequestHandlerObject represents a request message handler object.
\ No newline at end of file diff --git a/echonet/log/index.html b/echonet/log/index.html index e971d1eb..2e925ace 100644 --- a/echonet/log/index.html +++ b/echonet/log/index.html @@ -1,2 +1,3 @@ -echonet::log - Rust

Module echonet::log

source ·
Expand description

Logger function module.

-

Structs

  • Logger represents a default logger instance.
\ No newline at end of file +echonet::log - Rust +

Module echonet::log

source ·
Expand description

Logger function module.

+

Structs§

  • Logger represents a default logger instance.
\ No newline at end of file diff --git a/echonet/log/struct.Logger.html b/echonet/log/struct.Logger.html index 35ea1c4c..4944d866 100644 --- a/echonet/log/struct.Logger.html +++ b/echonet/log/struct.Logger.html @@ -1,13 +1,14 @@ -Logger in echonet::log - Rust

Struct echonet::log::Logger

source ·
pub struct Logger { /* private fields */ }
Expand description

Logger represents a default logger instance.

-

Implementations§

source§

impl Logger

source

pub fn new() -> Logger

source

pub fn shared() -> &'static Logger

source

pub fn set_level(&mut self, l: LevelFilter)

source

pub fn init()

Trait Implementations§

source§

impl Log for Logger

source§

fn enabled(&self, metadata: &Metadata<'_>) -> bool

Determines if a log message with the specified metadata would be -logged. Read more
source§

fn log(&self, record: &Record<'_>)

Logs the Record. Read more
source§

fn flush(&self)

Flushes any buffered records.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+Logger in echonet::log - Rust +

Struct echonet::log::Logger

source ·
pub struct Logger { /* private fields */ }
Expand description

Logger represents a default logger instance.

+

Implementations§

source§

impl Logger

source

pub fn new() -> Logger

source

pub fn shared() -> &'static Logger

source

pub fn set_level(&mut self, l: LevelFilter)

source

pub fn init()

Trait Implementations§

source§

impl Log for Logger

source§

fn enabled(&self, metadata: &Metadata<'_>) -> bool

Determines if a log message with the specified metadata would be +logged. Read more
source§

fn log(&self, record: &Record<'_>)

Logs the Record. Read more
source§

fn flush(&self)

Flushes any buffered records.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/echonet/protocol/constant.TID_MAX.html b/echonet/protocol/constant.TID_MAX.html index ca364aa2..3b26229b 100644 --- a/echonet/protocol/constant.TID_MAX.html +++ b/echonet/protocol/constant.TID_MAX.html @@ -1 +1,2 @@ -TID_MAX in echonet::protocol - Rust

Constant echonet::protocol::TID_MAX

source ·
pub const TID_MAX: TID = 65535;
\ No newline at end of file +TID_MAX in echonet::protocol - Rust +

Constant echonet::protocol::TID_MAX

source ·
pub const TID_MAX: TID = 65535;
\ No newline at end of file diff --git a/echonet/protocol/constant.TID_MIN.html b/echonet/protocol/constant.TID_MIN.html index 508ee025..9f86676e 100644 --- a/echonet/protocol/constant.TID_MIN.html +++ b/echonet/protocol/constant.TID_MIN.html @@ -1 +1,2 @@ -TID_MIN in echonet::protocol - Rust

Constant echonet::protocol::TID_MIN

source ·
pub const TID_MIN: TID = 0;
\ No newline at end of file +TID_MIN in echonet::protocol - Rust +

Constant echonet::protocol::TID_MIN

source ·
pub const TID_MIN: TID = 0;
\ No newline at end of file diff --git a/echonet/protocol/enum.ESV.html b/echonet/protocol/enum.ESV.html index 8ba8c7eb..b1061760 100644 --- a/echonet/protocol/enum.ESV.html +++ b/echonet/protocol/enum.ESV.html @@ -1,34 +1,35 @@ -ESV in echonet::protocol - Rust

Enum echonet::protocol::ESV

source ·
pub enum ESV {
-
Show 17 variants Unknown, - WriteRequest, - WriteRequestResponseRequired, - ReadRequest, - NotificationRequest, - WriteReadRequest, - WriteResponse, - ReadResponse, - Notification, - NotificationResponseRequired, - NotificationResponse, - WriteReadResponse, - WriteRequestError, - WriteRequestResponseRequiredError, - ReadRequestError, - NotificationRequestError, - WriteReadRequestError, +ESV in echonet::protocol - Rust +

Enum echonet::protocol::ESV

source ·
pub enum ESV {
+
Show 17 variants Unknown = 0, + WriteRequest = 96, + WriteRequestResponseRequired = 97, + ReadRequest = 98, + NotificationRequest = 99, + WriteReadRequest = 110, + WriteResponse = 113, + ReadResponse = 114, + Notification = 115, + NotificationResponseRequired = 116, + NotificationResponse = 122, + WriteReadResponse = 126, + WriteRequestError = 80, + WriteRequestResponseRequiredError = 81, + ReadRequestError = 82, + NotificationRequestError = 83, + WriteReadRequestError = 94,
}
Expand description

ESV represents an ECHONET-Lite service (ESV) code as specified in the ECHONET-Lite specification.

-

Variants§

§

Unknown

§

WriteRequest

§

WriteRequestResponseRequired

§

ReadRequest

§

NotificationRequest

§

WriteReadRequest

§

WriteResponse

§

ReadResponse

§

Notification

§

NotificationResponseRequired

§

NotificationResponse

§

WriteReadResponse

§

WriteRequestError

§

WriteRequestResponseRequiredError

§

ReadRequestError

§

NotificationRequestError

§

WriteReadRequestError

Implementations§

source§

impl ESV

source

pub fn from_u8(x: u8) -> ESV

source

pub fn to_u8(esv: ESV) -> u8

source

pub fn is_request(&self) -> bool

source

pub fn is_response(&self) -> bool

source

pub fn is_error_response(&self) -> bool

source

pub fn is_notification_response(&self) -> bool

source

pub fn is_unicast_response(&self) -> bool

Trait Implementations§

source§

impl Clone for ESV

source§

fn clone(&self) -> ESV

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ESV

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for ESV

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl IntoEnumIterator for ESV

§

type Iterator = ESVIter

source§

fn iter() -> ESVIter

source§

impl PartialEq<ESV> for ESV

source§

fn eq(&self, other: &ESV) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Copy for ESV

source§

impl StructuralPartialEq for ESV

Auto Trait Implementations§

§

impl RefUnwindSafe for ESV

§

impl Send for ESV

§

impl Sync for ESV

§

impl Unpin for ESV

§

impl UnwindSafe for ESV

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

Variants§

§

Unknown = 0

§

WriteRequest = 96

§

WriteRequestResponseRequired = 97

§

ReadRequest = 98

§

NotificationRequest = 99

§

WriteReadRequest = 110

§

WriteResponse = 113

§

ReadResponse = 114

§

Notification = 115

§

NotificationResponseRequired = 116

§

NotificationResponse = 122

§

WriteReadResponse = 126

§

WriteRequestError = 80

§

WriteRequestResponseRequiredError = 81

§

ReadRequestError = 82

§

NotificationRequestError = 83

§

WriteReadRequestError = 94

Implementations§

source§

impl ESV

source

pub fn from_u8(x: u8) -> ESV

source

pub fn to_u8(esv: ESV) -> u8

source

pub fn is_request(&self) -> bool

source

pub fn is_response(&self) -> bool

source

pub fn is_error_response(&self) -> bool

source

pub fn is_notification_response(&self) -> bool

source

pub fn is_unicast_response(&self) -> bool

Trait Implementations§

source§

impl Clone for ESV

source§

fn clone(&self) -> ESV

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ESV

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Display for ESV

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl IntoEnumIterator for ESV

§

type Iterator = ESVIter

source§

fn iter() -> ESVIter

source§

impl PartialEq for ESV

source§

fn eq(&self, other: &ESV) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Copy for ESV

source§

impl StructuralPartialEq for ESV

Auto Trait Implementations§

§

impl RefUnwindSafe for ESV

§

impl Send for ESV

§

impl Sync for ESV

§

impl Unpin for ESV

§

impl UnwindSafe for ESV

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere - T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for T
where + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for T
where + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/echonet/protocol/index.html b/echonet/protocol/index.html index 6f58ddda..56efd2a7 100644 --- a/echonet/protocol/index.html +++ b/echonet/protocol/index.html @@ -1,2 +1,3 @@ -echonet::protocol - Rust

Module echonet::protocol

source ·
Expand description

messaging packet encoder and decoder module.

-

Structs

  • Message represents a messaging packet between ECHONET-Lite nodes as specified in the ECHONET-Lite specification.
  • Each ECHONET-Lite message has properties. Property represents an ECHONET-Lite property of a message packet as specified in the ECHONET-Lite specification.

Enums

  • ESV represents an ECHONET-Lite service (ESV) code as specified in the ECHONET-Lite specification.

Constants

Type Definitions

  • PropertyCode represents an ECHONET-Lite property code (EPC) in an ECHONET-Lite message.
  • A Result type for protocol decoding and encoding operations.
  • TID represents an ECHONET-Lite transaction identification number as specified in the ECHONET-Lite specification.
\ No newline at end of file +echonet::protocol - Rust +

Module echonet::protocol

source ·
Expand description

messaging packet encoder and decoder module.

+

Structs§

  • Message represents a messaging packet between ECHONET-Lite nodes as specified in the ECHONET-Lite specification.
  • Each ECHONET-Lite message has properties. Property represents an ECHONET-Lite property of a message packet as specified in the ECHONET-Lite specification.

Enums§

  • ESV represents an ECHONET-Lite service (ESV) code as specified in the ECHONET-Lite specification.

Constants§

Type Aliases§

  • PropertyCode represents an ECHONET-Lite property code (EPC) in an ECHONET-Lite message.
  • A Result type for protocol decoding and encoding operations.
  • TID represents an ECHONET-Lite transaction identification number as specified in the ECHONET-Lite specification.
\ No newline at end of file diff --git a/echonet/protocol/struct.Message.html b/echonet/protocol/struct.Message.html index 992e377c..17d5e5bb 100644 --- a/echonet/protocol/struct.Message.html +++ b/echonet/protocol/struct.Message.html @@ -1,5 +1,6 @@ -Message in echonet::protocol - Rust

Struct echonet::protocol::Message

source ·
pub struct Message { /* private fields */ }
Expand description

Message represents a messaging packet between ECHONET-Lite nodes as specified in the ECHONET-Lite specification.

-

Examples

+Message in echonet::protocol - Rust +

Struct echonet::protocol::Message

source ·
pub struct Message { /* private fields */ }
Expand description

Message represents a messaging packet between ECHONET-Lite nodes as specified in the ECHONET-Lite specification.

+

§Examples

use echonet::protocol::Message;
 use echonet::protocol::ESV;
 use echonet::protocol::Property;
@@ -17,30 +18,30 @@ 

Examples

ESV::WriteReadRequest | ESV::WriteReadResponse | ESV::WriteReadRequestError => { let opc = msg.opc_set(); for (n, prop) in msg.properties_set().iter().enumerate() { - println!("[{}] {}", n, hex::encode(prop.data())); + println!("[{}] {}", n, hex::encode(prop.data())); } let opc = msg.opc_get(); for (n, prop) in msg.properties_get().iter().enumerate() { - println!("[{}] {}", n, hex::encode(prop.data())); + println!("[{}] {}", n, hex::encode(prop.data())); } } _ => { let opc = msg.opc(); for (n, prop) in msg.properties().iter().enumerate() { - println!("[{}] {}", n, hex::encode(prop.data())); + println!("[{}] {}", n, hex::encode(prop.data())); } } }
-

Implementations§

source§

impl Message

source

pub fn new() -> Message

source

pub fn from_bytes(msg_bytes: &[u8]) -> Message

source

pub fn set_tid(&mut self, tid: TID) -> &mut Self

source

pub fn has_tid(&self) -> bool

source

pub fn tid(&self) -> TID

source

pub fn set_seoj(&mut self, code: u32) -> &mut Self

source

pub fn seoj(&self) -> u32

source

pub fn set_deoj(&mut self, code: u32) -> &mut Self

source

pub fn deoj(&self) -> u32

source

pub fn set_esv(&mut self, code: ESV) -> &mut Self

source

pub fn esv(&self) -> ESV

source

pub fn opc(&self) -> usize

source

pub fn opc_set(&self) -> usize

source

pub fn opc_get(&self) -> usize

source

pub fn add_property(&mut self, prop: Property) -> &mut Self

source

pub fn add_property_set(&mut self, prop: Property) -> &mut Self

source

pub fn add_property_get(&mut self, prop: Property) -> &mut Self

source

pub fn properties(&self) -> &Vec<Property>

source

pub fn properties_set(&self) -> &Vec<Property>

source

pub fn properties_get(&self) -> &Vec<Property>

source

pub fn property(&self, n: usize) -> &Property

source

pub fn property_set(&self, n: usize) -> &Property

source

pub fn property_get(&self, n: usize) -> &Property

source

pub fn set_from(&mut self, addr: SocketAddr) -> &mut Self

source

pub fn from(&self) -> SocketAddr

source

pub fn is_format1(&mut self) -> bool

source

pub fn parse(&mut self, msg: &[u8]) -> bool

source

pub fn equals(&self, msg: &Message) -> bool

source

pub fn bytes(&self) -> Vec<u8>

source§

impl Message

Trait Implementations§

source§

impl Clone for Message

source§

fn clone(&self) -> Message

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Display for Message

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

Implementations§

source§

impl Message

source

pub fn new() -> Message

source

pub fn from_bytes(msg_bytes: &[u8]) -> Message

source

pub fn set_tid(&mut self, tid: TID) -> &mut Self

source

pub fn has_tid(&self) -> bool

source

pub fn tid(&self) -> TID

source

pub fn set_seoj(&mut self, code: u32) -> &mut Self

source

pub fn seoj(&self) -> u32

source

pub fn set_deoj(&mut self, code: u32) -> &mut Self

source

pub fn deoj(&self) -> u32

source

pub fn set_esv(&mut self, code: ESV) -> &mut Self

source

pub fn esv(&self) -> ESV

source

pub fn opc(&self) -> usize

source

pub fn opc_set(&self) -> usize

source

pub fn opc_get(&self) -> usize

source

pub fn add_property(&mut self, prop: Property) -> &mut Self

source

pub fn add_property_set(&mut self, prop: Property) -> &mut Self

source

pub fn add_property_get(&mut self, prop: Property) -> &mut Self

source

pub fn properties(&self) -> &Vec<Property>

source

pub fn properties_set(&self) -> &Vec<Property>

source

pub fn properties_get(&self) -> &Vec<Property>

source

pub fn property(&self, n: usize) -> &Property

source

pub fn property_set(&self, n: usize) -> &Property

source

pub fn property_get(&self, n: usize) -> &Property

source

pub fn set_from(&mut self, addr: SocketAddr) -> &mut Self

source

pub fn from(&self) -> SocketAddr

source

pub fn is_format1(&mut self) -> bool

source

pub fn parse(&mut self, msg: &[u8]) -> bool

source

pub fn equals(&self, msg: &Message) -> bool

source

pub fn bytes(&self) -> Vec<u8>

source§

impl Message

Trait Implementations§

source§

impl Clone for Message

source§

fn clone(&self) -> Message

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Display for Message

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere - T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for T
where + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for T
where + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/echonet/protocol/struct.Property.html b/echonet/protocol/struct.Property.html index ac8c4a19..054d8489 100644 --- a/echonet/protocol/struct.Property.html +++ b/echonet/protocol/struct.Property.html @@ -1,13 +1,14 @@ -Property in echonet::protocol - Rust

Struct echonet::protocol::Property

source ·
pub struct Property { /* private fields */ }
Expand description

Each ECHONET-Lite message has properties. Property represents an ECHONET-Lite property of a message packet as specified in the ECHONET-Lite specification.

-

Implementations§

source§

impl Property

source

pub fn new() -> Property

source

pub fn from(code: PropertyCode, data: Vec<u8>) -> Property

source

pub fn set_code(&mut self, code: PropertyCode) -> &mut Self

source

pub fn code(&self) -> PropertyCode

source

pub fn set_data(&mut self, data: Vec<u8>) -> &mut Self

source

pub fn data(&self) -> &Vec<u8>

source

pub fn size(&self) -> usize

source

pub fn parse(&mut self, msg: &[u8]) -> bool

source

pub fn equals(&self, prop: &Property) -> bool

Trait Implementations§

source§

impl Clone for Property

source§

fn clone(&self) -> Property

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl From<&Property> for Property

source§

fn from(from: &Property) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+Property in echonet::protocol - Rust +

Struct echonet::protocol::Property

source ·
pub struct Property { /* private fields */ }
Expand description

Each ECHONET-Lite message has properties. Property represents an ECHONET-Lite property of a message packet as specified in the ECHONET-Lite specification.

+

Implementations§

source§

impl Property

source

pub fn new() -> Property

source

pub fn from(code: PropertyCode, data: Vec<u8>) -> Property

source

pub fn set_code(&mut self, code: PropertyCode) -> &mut Self

source

pub fn code(&self) -> PropertyCode

source

pub fn set_data(&mut self, data: Vec<u8>) -> &mut Self

source

pub fn data(&self) -> &Vec<u8>

source

pub fn size(&self) -> usize

source

pub fn parse(&mut self, msg: &[u8]) -> bool

source

pub fn equals(&self, prop: &Property) -> bool

Trait Implementations§

source§

impl Clone for Property

source§

fn clone(&self) -> Property

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl From<&Property> for Property

source§

fn from(from: &Property) -> Self

Converts to this type from the input type.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for T
where + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/echonet/protocol/type.PropertyCode.html b/echonet/protocol/type.PropertyCode.html index 5694abb5..59f2b6f0 100644 --- a/echonet/protocol/type.PropertyCode.html +++ b/echonet/protocol/type.PropertyCode.html @@ -1,2 +1,3 @@ -PropertyCode in echonet::protocol - Rust

Type Definition echonet::protocol::PropertyCode

source ·
pub type PropertyCode = u8;
Expand description

PropertyCode represents an ECHONET-Lite property code (EPC) in an ECHONET-Lite message.

+PropertyCode in echonet::protocol - Rust +

Type Alias echonet::protocol::PropertyCode

source ·
pub type PropertyCode = u8;
Expand description

PropertyCode represents an ECHONET-Lite property code (EPC) in an ECHONET-Lite message.

\ No newline at end of file diff --git a/echonet/protocol/type.Result.html b/echonet/protocol/type.Result.html index e1413203..60564ce4 100644 --- a/echonet/protocol/type.Result.html +++ b/echonet/protocol/type.Result.html @@ -1,2 +1,8 @@ -Result in echonet::protocol - Rust

Type Definition echonet::protocol::Result

source ·
pub type Result<T> = Result<T, ProtocolError>;
Expand description

A Result type for protocol decoding and encoding operations.

-
\ No newline at end of file +Result in echonet::protocol - Rust +

Type Alias echonet::protocol::Result

source ·
pub type Result<T> = Result<T, ProtocolError>;
Expand description

A Result type for protocol decoding and encoding operations.

+

Aliased Type§

enum Result<T> {
+    Ok(T),
+    Err(ProtocolError),
+}

Variants§

§1.0.0

Ok(T)

Contains the success value

+
§1.0.0

Err(ProtocolError)

Contains the error value

+
\ No newline at end of file diff --git a/echonet/protocol/type.TID.html b/echonet/protocol/type.TID.html index 609e8dcc..550dbcf3 100644 --- a/echonet/protocol/type.TID.html +++ b/echonet/protocol/type.TID.html @@ -1,2 +1,3 @@ -TID in echonet::protocol - Rust

Type Definition echonet::protocol::TID

source ·
pub type TID = u16;
Expand description

TID represents an ECHONET-Lite transaction identification number as specified in the ECHONET-Lite specification.

+TID in echonet::protocol - Rust +

Type Alias echonet::protocol::TID

source ·
pub type TID = u16;
Expand description

TID represents an ECHONET-Lite transaction identification number as specified in the ECHONET-Lite specification.

\ No newline at end of file diff --git a/echonet/struct.Controller.html b/echonet/struct.Controller.html index 41a448ea..3ab92c33 100644 --- a/echonet/struct.Controller.html +++ b/echonet/struct.Controller.html @@ -1,5 +1,6 @@ -Controller in echonet - Rust

Struct echonet::Controller

source ·
pub struct Controller { /* private fields */ }
Expand description

Controller represents an ECHONET-Lite controller node to communicate other ECHONET-Lite nodes.

-

Examples

+Controller in echonet - Rust +

Struct echonet::Controller

source ·
pub struct Controller { /* private fields */ }
Expand description

Controller represents an ECHONET-Lite controller node to communicate other ECHONET-Lite nodes.

+

§Examples

use std::{thread, time};
 
 use echonet::{Controller, Property};
@@ -10,14 +11,14 @@ 

Examples

ctrl.search(); thread::sleep(time::Duration::from_secs(2)); for (i, node) in ctrl.nodes().iter().enumerate() { - println!("[{}] {}", i, node.addr()); + println!("[{}] {}", i, node.addr()); for (j, obj) in node.objects().iter().enumerate() { - println!("[{}] {:06X}", j, obj.code()); + println!("[{}] {:06X}", j, obj.code()); for obj_prop in obj.properties() { if !obj_prop.is_read_required() { continue; } - print!("[{:02X}] {}:", obj_prop.code(), obj_prop.name()); + print!("[{:02X}] {}:", obj_prop.code(), obj_prop.name()); let mut msg = Message::new(); msg.set_esv(ESV::ReadRequest); msg.set_deoj(obj.code()); @@ -27,38 +28,38 @@

Examples

match rx.recv_timeout(time::Duration::from_secs(1)) { Ok(msg) => { if 0 < msg.opc() { - println!("{}", hex::encode(msg.property(0).data())); + println!("{}", hex::encode(msg.property(0).data())); } } Err(_e) => { - println!("{}", "<timeout>"); + println!("{}", "<timeout>"); } }; } } } ctrl.stop();
-

Implementations§

source§

impl Controller

source

pub fn new() -> Controller

Create a new controller.

-
source

pub fn new_with_node(node: Arc<Mutex<Node>>) -> Controller

Create a new controller with the node to which it belongs.

-
source

pub fn add_observer(&mut self, observer: ObserverObject) -> bool

source

pub fn nodes(&mut self) -> Vec<RemoteNode>

Returns all searched remote nodes.

-
source

pub fn search_object(&mut self, obj_code: ObjectCode) -> bool

Searches only the specified object nodes on the local network.

-
source

pub fn search(&mut self) -> bool

Searches all ECHONET-Lite nodes on the local network.

-
source

pub fn send_message(&self, remote_node: &RemoteNode, msg: &mut Message) -> bool

Sends the specified message to the specified remote node. The function automatically updates the SEOJ (Source ECHONET-Lite object) and TID (Transaction ID) in the specified message, so you do not need to set the message fields.

-
source

pub fn post_message( +

Implementations§

source§

impl Controller

source

pub fn new() -> Controller

Create a new controller.

+
source

pub fn new_with_node(node: Arc<Mutex<Node>>) -> Controller

Create a new controller with the node to which it belongs.

+
source

pub fn add_observer(&mut self, observer: ObserverObject) -> bool

source

pub fn nodes(&mut self) -> Vec<RemoteNode>

Returns all searched remote nodes.

+
source

pub fn search_object(&mut self, obj_code: ObjectCode) -> bool

Searches only the specified object nodes on the local network.

+
source

pub fn search(&mut self) -> bool

Searches all ECHONET-Lite nodes on the local network.

+
source

pub fn send_message(&self, remote_node: &RemoteNode, msg: &mut Message) -> bool

Sends the specified message to the specified remote node. The function automatically updates the SEOJ (Source ECHONET-Lite object) and TID (Transaction ID) in the specified message, so you do not need to set the message fields.

+
source

pub fn post_message( &self, remote_node: &RemoteNode, msg: &mut Message -) -> Receiver<Message>

Posts the specified message to the remote node and waits for the response using the messaging channel. TThe function automatically updates the SEOJ (Source ECHONET-Lite object) and TID (Transaction ID) in the specified message, so you do not need to set the message fields.

-
source

pub fn start(&mut self) -> bool

Starts the controller node to communicate with other ECHONET-Lite nodes on the local network.

-
source

pub fn stop(&mut self) -> bool

Stops the controller node, and clears all searched remote nodes.

-

Trait Implementations§

source§

impl Drop for Controller

source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+) -> Receiver<Message>

Posts the specified message to the remote node and waits for the response using the messaging channel. TThe function automatically updates the SEOJ (Source ECHONET-Lite object) and TID (Transaction ID) in the specified message, so you do not need to set the message fields.

+
source

pub fn start(&mut self) -> bool

Starts the controller node to communicate with other ECHONET-Lite nodes on the local network.

+
source

pub fn stop(&mut self) -> bool

Stops the controller node, and clears all searched remote nodes.

+

Trait Implementations§

source§

impl Drop for Controller

source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/echonet/struct.Device.html b/echonet/struct.Device.html index 351935f0..817b0a58 100644 --- a/echonet/struct.Device.html +++ b/echonet/struct.Device.html @@ -1,5 +1,6 @@ -Device in echonet - Rust

Struct echonet::Device

source ·
pub struct Device { /* private fields */ }
Expand description

Device represents an ECHONET-Lite device node. The device is created with a standard device object code, and the object is automatically added the standard properties which are specified in APPENDIX Detailed Requirements for ECHONET Device Objects by the ECHONET Consortium.

-

Examples

+Device in echonet - Rust +

Struct echonet::Device

source ·
pub struct Device { /* private fields */ }
Expand description

Device represents an ECHONET-Lite device node. The device is created with a standard device object code, and the object is automatically added the standard properties which are specified in APPENDIX Detailed Requirements for ECHONET Device Objects by the ECHONET Consortium.

+

§Examples

use std::sync::{Arc, Mutex};
 use echonet::protocol::{ESV, Property};
 use echonet::util::Bytes;
@@ -63,22 +64,22 @@ 

Examples

false } }
-

Implementations§

source§

impl Device

source

pub fn new(code: ObjectCode) -> Device

Creates a new device with a specified object code. The object is automatically added the standard properties which are specified in APPENDIX Detailed Requirements for ECHONET Device Objects by the ECHONET Consortium.

-
source

pub fn new_with_node(code: ObjectCode, node: Arc<Mutex<Node>>) -> Device

Creates a new device with a specified object code and node to which it belongs. The functions is used when a node has multiple devices.

-
source

pub fn code(&self) -> ObjectCode

Returns the object code.

-
source

pub fn node(&self) -> Arc<Mutex<Node>>

Returns the parent local node to which the device belongs.

-
source

pub fn set_property(&mut self, code: u8, data: &[u8]) -> bool

Sets the data into the specified property if the device node has the property, otherwise return false.

-
source

pub fn property(&self, code: u8) -> Option<Vec<u8>>

Gets the specified property data if the device node has the property, otherwise return none.

-
source

pub fn set_request_handler(&mut self, handler: RequestHandlerObject)

source

pub fn start(&mut self) -> bool

Starts the device to communicate with other ECHONET-Lite nodes on the local network.

-
source

pub fn stop(&mut self) -> bool

Stops the device.

-
source§

impl Device

source

pub fn set_manufacturer_code(&mut self, code: u32) -> bool

source

pub fn set_operating_status(&mut self, status: bool) -> bool

source

pub fn set_installation_location(&mut self, loc: u8) -> bool

source

pub fn set_standard_version(&mut self, ver: u8) -> bool

source

pub fn standard_version(&mut self) -> Option<Vec<u8>>

source

pub fn set_fault_status(&mut self, status: bool) -> bool

Trait Implementations§

source§

impl Drop for Device

source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

Implementations§

source§

impl Device

source

pub fn new(code: ObjectCode) -> Device

Creates a new device with a specified object code. The object is automatically added the standard properties which are specified in APPENDIX Detailed Requirements for ECHONET Device Objects by the ECHONET Consortium.

+
source

pub fn new_with_node(code: ObjectCode, node: Arc<Mutex<Node>>) -> Device

Creates a new device with a specified object code and node to which it belongs. The functions is used when a node has multiple devices.

+
source

pub fn code(&self) -> ObjectCode

Returns the object code.

+
source

pub fn node(&self) -> Arc<Mutex<Node>>

Returns the parent local node to which the device belongs.

+
source

pub fn set_property(&mut self, code: u8, data: &[u8]) -> bool

Sets the data into the specified property if the device node has the property, otherwise return false.

+
source

pub fn property(&self, code: u8) -> Option<Vec<u8>>

Gets the specified property data if the device node has the property, otherwise return none.

+
source

pub fn set_request_handler(&mut self, handler: RequestHandlerObject)

source

pub fn start(&mut self) -> bool

Starts the device to communicate with other ECHONET-Lite nodes on the local network.

+
source

pub fn stop(&mut self) -> bool

Stops the device.

+
source§

impl Device

source

pub fn set_manufacturer_code(&mut self, code: u32) -> bool

source

pub fn set_operating_status(&mut self, status: bool) -> bool

source

pub fn set_installation_location(&mut self, loc: u8) -> bool

source

pub fn set_standard_version(&mut self, ver: u8) -> bool

source

pub fn standard_version(&mut self) -> Option<Vec<u8>>

source

pub fn set_fault_status(&mut self, status: bool) -> bool

Trait Implementations§

source§

impl Drop for Device

source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/echonet/struct.Manufacture.html b/echonet/struct.Manufacture.html index 15504145..edddc435 100644 --- a/echonet/struct.Manufacture.html +++ b/echonet/struct.Manufacture.html @@ -1,12 +1,13 @@ -Manufacture in echonet - Rust

Struct echonet::Manufacture

source ·
pub struct Manufacture { /* private fields */ }
Expand description

Manufacture represents a manufacturer name and code registerd by the ECHONET CONSORTIUM.

-

Implementations§

source§

impl Manufacture

source

pub fn new() -> Manufacture

source

pub fn set_code(&mut self, code: ManufactureCode)

source

pub fn code(&self) -> ManufactureCode

source

pub fn set_name(&mut self, name: String)

source

pub fn name(&self) -> &String

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+Manufacture in echonet - Rust +

Struct echonet::Manufacture

source ·
pub struct Manufacture { /* private fields */ }
Expand description

Manufacture represents a manufacturer name and code registerd by the ECHONET CONSORTIUM.

+

Implementations§

source§

impl Manufacture

source

pub fn new() -> Manufacture

source

pub fn set_code(&mut self, code: ManufactureCode)

source

pub fn code(&self) -> ManufactureCode

source

pub fn set_name(&mut self, name: String)

source

pub fn name(&self) -> &String

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/echonet/struct.Node.html b/echonet/struct.Node.html index 8b4e5df3..221fde72 100644 --- a/echonet/struct.Node.html +++ b/echonet/struct.Node.html @@ -1,16 +1,17 @@ -Node in echonet - Rust

Struct echonet::Node

source ·
pub struct Node { /* private fields */ }
Expand description

Node represents an ECHONET-Lite node which contains ECHONET-Lite objects such the profiles and the devices.

-

Implementations§

source§

impl Node

source

pub fn new() -> Arc<Mutex<Node>>

source

pub fn init_node_profile_object(&mut self)

source

pub fn add_object(&mut self, obj: Object) -> bool

source

pub fn objects(&self) -> &Vec<Object>

source

pub fn find_object(&self, code: ObjectCode) -> Option<&Object>

source

pub fn find_object_mut(&mut self, code: ObjectCode) -> Option<&mut Object>

source

pub fn node_profile_object(&mut self) -> Option<&mut Object>

source

pub fn add_request_handler(&mut self, handler: RequestHandlerObject) -> bool

source

pub fn add_observer(&mut self, observer: ObserverObject) -> bool

source

pub fn send_message(&mut self, to_addr: SocketAddr, msg: &mut Message) -> bool

source

pub fn post_message( +Node in echonet - Rust +

Struct echonet::Node

source ·
pub struct Node { /* private fields */ }
Expand description

Node represents an ECHONET-Lite node which contains ECHONET-Lite objects such the profiles and the devices.

+

Implementations§

source§

impl Node

source

pub fn new() -> Arc<Mutex<Node>>

source

pub fn init_node_profile_object(&mut self)

source

pub fn add_object(&mut self, obj: Object) -> bool

source

pub fn objects(&self) -> &Vec<Object>

source

pub fn find_object(&self, code: ObjectCode) -> Option<&Object>

source

pub fn find_object_mut(&mut self, code: ObjectCode) -> Option<&mut Object>

source

pub fn node_profile_object(&mut self) -> Option<&mut Object>

source

pub fn add_request_handler(&mut self, handler: RequestHandlerObject) -> bool

source

pub fn add_observer(&mut self, observer: ObserverObject) -> bool

source

pub fn send_message(&mut self, to_addr: SocketAddr, msg: &mut Message) -> bool

source

pub fn post_message( &mut self, - to_addr: SocketAddr, + to_addr: SocketAddr, msg: &mut Message -) -> Receiver<Message>

source

pub fn notify(&mut self, msg: &mut Message) -> bool

source

pub fn annouce_property(&mut self, obj: &Object, prop: &Property) -> bool

source

pub fn annouce(&mut self) -> bool

source

pub fn has_interface(&self, addr: IpAddr) -> bool

source

pub fn is_running(&self) -> bool

source

pub fn start(&mut self) -> bool

source

pub fn stop(&mut self) -> bool

Trait Implementations§

source§

impl Drop for Node

source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl RefUnwindSafe for Node

§

impl Send for Node

§

impl Sync for Node

§

impl Unpin for Node

§

impl UnwindSafe for Node

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+) -> Receiver<Message>

source

pub fn notify(&mut self, msg: &mut Message) -> bool

source

pub fn annouce_property(&mut self, obj: &Object, prop: &Property) -> bool

source

pub fn annouce(&mut self) -> bool

source

pub fn has_interface(&self, addr: IpAddr) -> bool

source

pub fn is_running(&self) -> bool

source

pub fn start(&mut self) -> bool

source

pub fn stop(&mut self) -> bool

Trait Implementations§

source§

impl Drop for Node

source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl RefUnwindSafe for Node

§

impl Send for Node

§

impl Sync for Node

§

impl Unpin for Node

§

impl UnwindSafe for Node

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/echonet/struct.Object.html b/echonet/struct.Object.html index 8deef6fd..91cbae4c 100644 --- a/echonet/struct.Object.html +++ b/echonet/struct.Object.html @@ -1,17 +1,18 @@ -Object in echonet - Rust

Struct echonet::Object

source ·
pub struct Object { /* private fields */ }
Expand description

Each ECHONET-Lite node has objects. Object represents an ECHONET-Lite Object in an ECHONET-Lite node.

-

Implementations§

source§

impl Object

source

pub fn new() -> Object

source

pub fn from_code(code: ObjectCode) -> Object

source

pub fn set_code(&mut self, code: ObjectCode) -> &mut Self

source

pub fn set_class_group_code(&mut self, code: u8) -> &mut Self

source

pub fn set_class_code(&mut self, code: u8) -> &mut Self

source

pub fn set_instance_code(&mut self, code: u8) -> &mut Self

source

pub fn code(&self) -> ObjectCode

source

pub fn class_group_code(&self) -> u8

source

pub fn class_code(&self) -> u8

source

pub fn instance_code(&self) -> u8

source

pub fn set_name(&mut self, name: String) -> &mut Self

source

pub fn name(&self) -> &String

source

pub fn set_class_name(&mut self, name: String) -> &mut Self

source

pub fn class_name(&self) -> &String

source

pub fn add_property(&mut self, prop: Property) -> bool

source

pub fn properties(&self) -> Values<'_, u8, Property>

source

pub fn find_property_mut(&mut self, code: u8) -> Option<&mut Property>

source

pub fn find_property(&self, code: u8) -> Option<&Property>

source

pub fn has_property(&self, code: u8) -> bool

source

pub fn set_property_data(&mut self, code: u8, data: &[u8]) -> bool

source

pub fn set_property_byte(&mut self, code: u8, v: u8) -> bool

source

pub fn set_property_bytes(&mut self, code: u8, data: &[u8]) -> bool

source

pub fn set_property_int(&mut self, code: u8, val: u32, byte_size: usize) -> bool

source

pub fn property_data(&self, code: u8) -> Option<&Vec<u8>>

source

pub fn property_data_as_bytes(&self, code: u8) -> Option<&[u8]>

source

pub fn property_data_as_byte(&self, code: u8) -> Option<u8>

source

pub fn property_data_as_int(&self, code: u8) -> Option<u32>

source

pub fn equals_property_data(&mut self, code: u8, data: &[u8]) -> bool

source

pub fn add_standard_properties(&mut self, code: ObjectCode) -> bool

source

pub fn message_received(&self, req_msg: &Message) -> Option<Message>

source§

impl Object

source

pub fn set_manufacturer_code(&mut self, code: u32) -> bool

source

pub fn manufacturer_code(&mut self) -> &mut Property

source

pub fn set_operating_status(&mut self, status: bool) -> bool

source

pub fn operating_status(&mut self) -> Option<u8>

source

pub fn set_fault_status(&mut self, status: bool) -> bool

source

pub fn fault_status(&mut self) -> Option<u8>

source

pub fn set_installation_location(&mut self, loc: u8) -> bool

source

pub fn installation_location(&mut self) -> Option<u8>

source

pub fn set_standard_version(&mut self, ver: u8) -> bool

source

pub fn standard_version(&mut self) -> Option<u8>

source

pub fn set_id(&mut self, id: &[u8]) -> bool

source

pub fn id(&self) -> Option<&[u8]>

Trait Implementations§

source§

impl Clone for Object

source§

fn clone(&self) -> Object

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Hash for Object

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl PartialEq<Object> for Object

source§

fn eq(&self, other: &Self) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Eq for Object

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+Object in echonet - Rust +

Struct echonet::Object

source ·
pub struct Object { /* private fields */ }
Expand description

Each ECHONET-Lite node has objects. Object represents an ECHONET-Lite Object in an ECHONET-Lite node.

+

Implementations§

source§

impl Object

source

pub fn new() -> Object

source

pub fn from_code(code: ObjectCode) -> Object

source

pub fn set_code(&mut self, code: ObjectCode) -> &mut Self

source

pub fn set_class_group_code(&mut self, code: u8) -> &mut Self

source

pub fn set_class_code(&mut self, code: u8) -> &mut Self

source

pub fn set_instance_code(&mut self, code: u8) -> &mut Self

source

pub fn code(&self) -> ObjectCode

source

pub fn class_group_code(&self) -> u8

source

pub fn class_code(&self) -> u8

source

pub fn instance_code(&self) -> u8

source

pub fn set_name(&mut self, name: String) -> &mut Self

source

pub fn name(&self) -> &String

source

pub fn set_class_name(&mut self, name: String) -> &mut Self

source

pub fn class_name(&self) -> &String

source

pub fn add_property(&mut self, prop: Property) -> bool

source

pub fn properties(&self) -> Values<'_, u8, Property>

source

pub fn find_property_mut(&mut self, code: u8) -> Option<&mut Property>

source

pub fn find_property(&self, code: u8) -> Option<&Property>

source

pub fn has_property(&self, code: u8) -> bool

source

pub fn set_property_data(&mut self, code: u8, data: &[u8]) -> bool

source

pub fn set_property_byte(&mut self, code: u8, v: u8) -> bool

source

pub fn set_property_bytes(&mut self, code: u8, data: &[u8]) -> bool

source

pub fn set_property_int(&mut self, code: u8, val: u32, byte_size: usize) -> bool

source

pub fn property_data(&self, code: u8) -> Option<&Vec<u8>>

source

pub fn property_data_as_bytes(&self, code: u8) -> Option<&[u8]>

source

pub fn property_data_as_byte(&self, code: u8) -> Option<u8>

source

pub fn property_data_as_int(&self, code: u8) -> Option<u32>

source

pub fn equals_property_data(&mut self, code: u8, data: &[u8]) -> bool

source

pub fn add_standard_properties(&mut self, code: ObjectCode) -> bool

source

pub fn message_received(&self, req_msg: &Message) -> Option<Message>

source§

impl Object

source

pub fn set_manufacturer_code(&mut self, code: u32) -> bool

source

pub fn manufacturer_code(&mut self) -> &mut Property

source

pub fn set_operating_status(&mut self, status: bool) -> bool

source

pub fn operating_status(&mut self) -> Option<u8>

source

pub fn set_fault_status(&mut self, status: bool) -> bool

source

pub fn fault_status(&mut self) -> Option<u8>

source

pub fn set_installation_location(&mut self, loc: u8) -> bool

source

pub fn installation_location(&mut self) -> Option<u8>

source

pub fn set_standard_version(&mut self, ver: u8) -> bool

source

pub fn standard_version(&mut self) -> Option<u8>

source

pub fn set_id(&mut self, id: &[u8]) -> bool

source

pub fn id(&self) -> Option<&[u8]>

Trait Implementations§

source§

impl Clone for Object

source§

fn clone(&self) -> Object

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Hash for Object

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where + H: Hasher, + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl PartialEq for Object

source§

fn eq(&self, other: &Self) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for Object

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for T
where + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/echonet/struct.Property.html b/echonet/struct.Property.html index f0b682a1..8bd74a66 100644 --- a/echonet/struct.Property.html +++ b/echonet/struct.Property.html @@ -1,15 +1,16 @@ -Property in echonet - Rust

Struct echonet::Property

source ·
pub struct Property { /* private fields */ }
Expand description

Each ECHONET-Lite object has properties. Property represents an ECHONET-Lite property in an ECHONET-Lite object.

-

Implementations§

source§

impl Property

source

pub fn new() -> Property

source

pub fn set_code(&mut self, code: u8) -> &mut Self

source

pub fn code(&self) -> u8

source

pub fn set_name(&mut self, name: String) -> &mut Self

source

pub fn name(&self) -> &String

source

pub fn set_data_type(&mut self, typ: String) -> &mut Self

source

pub fn data_type(&self) -> &String

source

pub fn set_capacity(&mut self, capacity: usize) -> &mut Self

source

pub fn capacity(&self) -> usize

source

pub fn set_read_attribute(&mut self, attr: PropertyRule) -> &mut Self

source

pub fn read_attribute(&self) -> PropertyRule

source

pub fn set_write_attribute(&mut self, attr: PropertyRule) -> &mut Self

source

pub fn write_attribute(&self) -> PropertyRule

source

pub fn set_anno_attribute(&mut self, attr: PropertyRule) -> &mut Self

source

pub fn anno_attribute(&self) -> PropertyRule

source

pub fn is_read_required(&self) -> bool

source

pub fn is_write_required(&self) -> bool

source

pub fn is_announce_required(&self) -> bool

source

pub fn is_readable(&self) -> bool

source

pub fn is_writable(&self) -> bool

source

pub fn is_announceable(&self) -> bool

source

pub fn is_readonly(&self) -> bool

source

pub fn is_writeonly(&self) -> bool

source

pub fn size(&self) -> usize

source

pub fn set_data(&mut self, data: &[u8]) -> &mut Self

source

pub fn set_byte_data(&mut self, v: u8) -> &mut Self

source

pub fn set_bytes_data(&mut self, data: &[u8]) -> &mut Self

source

pub fn set_int_data(&mut self, val: u32, byte_size: usize) -> &mut Self

source

pub fn add_data(&mut self, data: &[u8]) -> &mut Self

source

pub fn data(&self) -> &Vec<u8>

source

pub fn data_as_bytes(&self) -> &[u8]

source

pub fn data_as_byte(&self) -> u8

source

pub fn data_as_int(&self) -> u32

source

pub fn equals_data(&self, data: &[u8]) -> bool

source

pub fn add_enum(&mut self, e: PropertyEnum) -> bool

source

pub fn enums(&self) -> Values<'_, u32, PropertyEnum>

source

pub fn find_enum(&self, code: u32) -> Option<&PropertyEnum>

Trait Implementations§

source§

impl Clone for Property

source§

fn clone(&self) -> Property

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl From<&Property> for Property

source§

fn from(from: &Property) -> Self

Converts to this type from the input type.
source§

impl Hash for Property

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+Property in echonet - Rust +

Struct echonet::Property

source ·
pub struct Property { /* private fields */ }
Expand description

Each ECHONET-Lite object has properties. Property represents an ECHONET-Lite property in an ECHONET-Lite object.

+

Implementations§

source§

impl Property

source

pub fn new() -> Property

source

pub fn set_code(&mut self, code: u8) -> &mut Self

source

pub fn code(&self) -> u8

source

pub fn set_name(&mut self, name: String) -> &mut Self

source

pub fn name(&self) -> &String

source

pub fn set_data_type(&mut self, typ: String) -> &mut Self

source

pub fn data_type(&self) -> &String

source

pub fn set_capacity(&mut self, capacity: usize) -> &mut Self

source

pub fn capacity(&self) -> usize

source

pub fn set_read_attribute(&mut self, attr: PropertyRule) -> &mut Self

source

pub fn read_attribute(&self) -> PropertyRule

source

pub fn set_write_attribute(&mut self, attr: PropertyRule) -> &mut Self

source

pub fn write_attribute(&self) -> PropertyRule

source

pub fn set_anno_attribute(&mut self, attr: PropertyRule) -> &mut Self

source

pub fn anno_attribute(&self) -> PropertyRule

source

pub fn is_read_required(&self) -> bool

source

pub fn is_write_required(&self) -> bool

source

pub fn is_announce_required(&self) -> bool

source

pub fn is_readable(&self) -> bool

source

pub fn is_writable(&self) -> bool

source

pub fn is_announceable(&self) -> bool

source

pub fn is_readonly(&self) -> bool

source

pub fn is_writeonly(&self) -> bool

source

pub fn size(&self) -> usize

source

pub fn set_data(&mut self, data: &[u8]) -> &mut Self

source

pub fn set_byte_data(&mut self, v: u8) -> &mut Self

source

pub fn set_bytes_data(&mut self, data: &[u8]) -> &mut Self

source

pub fn set_int_data(&mut self, val: u32, byte_size: usize) -> &mut Self

source

pub fn add_data(&mut self, data: &[u8]) -> &mut Self

source

pub fn data(&self) -> &Vec<u8>

source

pub fn data_as_bytes(&self) -> &[u8]

source

pub fn data_as_byte(&self) -> u8

source

pub fn data_as_int(&self) -> u32

source

pub fn equals_data(&self, data: &[u8]) -> bool

source

pub fn add_enum(&mut self, e: PropertyEnum) -> bool

source

pub fn enums(&self) -> Values<'_, u32, PropertyEnum>

source

pub fn find_enum(&self, code: u32) -> Option<&PropertyEnum>

Trait Implementations§

source§

impl Clone for Property

source§

fn clone(&self) -> Property

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl From<&Property> for Property

source§

fn from(from: &Property) -> Self

Converts to this type from the input type.
source§

impl Hash for Property

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where + H: Hasher, + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for T
where + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/echonet/struct.PropertyEnum.html b/echonet/struct.PropertyEnum.html index b7613063..3dabe855 100644 --- a/echonet/struct.PropertyEnum.html +++ b/echonet/struct.PropertyEnum.html @@ -1,15 +1,16 @@ -PropertyEnum in echonet - Rust

Struct echonet::PropertyEnum

source ·
pub struct PropertyEnum { /* private fields */ }
Expand description

PropertyEnum represents an ECHONET-Lite property enumerated data.

-

Implementations§

source§

impl PropertyEnum

source

pub fn new() -> PropertyEnum

source

pub fn set_code(&mut self, code: u32) -> &mut Self

source

pub fn code(&self) -> u32

source

pub fn set_name(&mut self, name: String) -> &mut Self

source

pub fn name(&self) -> &String

source

pub fn set_description(&mut self, desc: String) -> &mut Self

source

pub fn description(&self) -> &String

Trait Implementations§

source§

impl Clone for PropertyEnum

source§

fn clone(&self) -> PropertyEnum

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Hash for PropertyEnum

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+PropertyEnum in echonet - Rust +

Struct echonet::PropertyEnum

source ·
pub struct PropertyEnum { /* private fields */ }
Expand description

PropertyEnum represents an ECHONET-Lite property enumerated data.

+

Implementations§

source§

impl PropertyEnum

source

pub fn new() -> PropertyEnum

source

pub fn set_code(&mut self, code: u32) -> &mut Self

source

pub fn code(&self) -> u32

source

pub fn set_name(&mut self, name: String) -> &mut Self

source

pub fn name(&self) -> &String

source

pub fn set_description(&mut self, desc: String) -> &mut Self

source

pub fn description(&self) -> &String

Trait Implementations§

source§

impl Clone for PropertyEnum

source§

fn clone(&self) -> PropertyEnum

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Hash for PropertyEnum

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where + H: Hasher, + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for T
where + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/echonet/struct.RemoteNode.html b/echonet/struct.RemoteNode.html index 90b1fd86..3d8904aa 100644 --- a/echonet/struct.RemoteNode.html +++ b/echonet/struct.RemoteNode.html @@ -1,17 +1,18 @@ -RemoteNode in echonet - Rust

Struct echonet::RemoteNode

source ·
pub struct RemoteNode { /* private fields */ }
Expand description

RemoteNode represents an ECHONET-Lite node discovered by Controller. The remote node has the standard objects and properties defined by the ECHONET CONSORTIUM.

-

Implementations§

source§

impl RemoteNode

source

pub fn new() -> RemoteNode

source

pub fn from_message(msg: &Message) -> RemoteNode

source

pub fn addr(&self) -> SocketAddr

source

pub fn set_addr(&mut self, addr: SocketAddr)

source

pub fn add_object(&mut self, obj: Object) -> bool

source

pub fn objects(&self) -> &Vec<Object>

source

pub fn objects_mut(&mut self) -> &mut Vec<Object>

source

pub fn find_object(&self, code: ObjectCode) -> Option<&Object>

Trait Implementations§

source§

impl Clone for RemoteNode

source§

fn clone(&self) -> RemoteNode

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Hash for RemoteNode

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where - H: Hasher, - Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl PartialEq<RemoteNode> for RemoteNode

source§

fn eq(&self, other: &Self) -> bool

This method tests for self and other values to be equal, and is used -by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
source§

impl Eq for RemoteNode

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+RemoteNode in echonet - Rust +

Struct echonet::RemoteNode

source ·
pub struct RemoteNode { /* private fields */ }
Expand description

RemoteNode represents an ECHONET-Lite node discovered by Controller. The remote node has the standard objects and properties defined by the ECHONET CONSORTIUM.

+

Implementations§

source§

impl RemoteNode

source

pub fn new() -> RemoteNode

source

pub fn from_message(msg: &Message) -> RemoteNode

source

pub fn addr(&self) -> SocketAddr

source

pub fn set_addr(&mut self, addr: SocketAddr)

source

pub fn add_object(&mut self, obj: Object) -> bool

source

pub fn objects(&self) -> &Vec<Object>

source

pub fn objects_mut(&mut self) -> &mut Vec<Object>

source

pub fn find_object(&self, code: ObjectCode) -> Option<&Object>

Trait Implementations§

source§

impl Clone for RemoteNode

source§

fn clone(&self) -> RemoteNode

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Hash for RemoteNode

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where + H: Hasher, + Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl PartialEq for RemoteNode

source§

fn eq(&self, other: &Self) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl Eq for RemoteNode

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T> ToOwned for Twhere - T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for T
where + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/echonet/struct.StandardDatabase.html b/echonet/struct.StandardDatabase.html index 0417e0c4..c4a5a981 100644 --- a/echonet/struct.StandardDatabase.html +++ b/echonet/struct.StandardDatabase.html @@ -1,5 +1,6 @@ -StandardDatabase in echonet - Rust
pub struct StandardDatabase { /* private fields */ }
Expand description

StandardDatabase provides a standard database for ECHONET-Lite device objects and manufactures. This standard database was generated by importing Machine Readable Appendix and Manufacturer code List provided by the ECHONET Consortium.

-

Examples

+StandardDatabase in echonet - Rust +
pub struct StandardDatabase { /* private fields */ }
Expand description

StandardDatabase provides a standard database for ECHONET-Lite device objects and manufactures. This standard database was generated by importing Machine Readable Appendix and Manufacturer code List provided by the ECHONET Consortium.

+

§Examples

use echonet::StandardDatabase;
 
 let db = StandardDatabase::shared();
@@ -10,14 +11,14 @@ 

Examples

assert!(obj.is_some()); let prop = obj.unwrap().find_property(0xB0); assert!(prop.is_some());
-

Implementations§

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

Implementations§

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/echonet/trait.RequestHandler.html b/echonet/trait.RequestHandler.html index f1b37462..e2a128dd 100644 --- a/echonet/trait.RequestHandler.html +++ b/echonet/trait.RequestHandler.html @@ -1,13 +1,14 @@ -RequestHandler in echonet - Rust
pub trait RequestHandler {
+RequestHandler in echonet - Rust
+    
pub trait RequestHandler {
     // Required method
     fn property_request_received(
         &mut self,
         deoj: &mut Object,
         esv: ESV,
         prop: &Property
-    ) -> bool;
+    ) -> bool;
 }
Expand description

RequestHandler defines a request message handler interface.

-

Examples

+

§Examples

use std::sync::{Arc, Mutex};
 use echonet::{Device, ObjectCode, Object, RequestHandler};
 use echonet::protocol::{ESV, Property};
@@ -68,14 +69,14 @@ 

Examples

false } }
-

Required Methods§

Required Methods§

source

fn property_request_received( &mut self, deoj: &mut Object, esv: ESV, prop: &Property -) -> bool

Implementations on Foreign Types§

source§

impl RequestHandler for Arc<Mutex<Node>>

Implementations on Foreign Types§

source§

impl RequestHandler for Arc<Mutex<Node>>

source§

fn property_request_received( &mut self, deoj: &mut Object, esv: ESV, prop: &Property -) -> bool

Implementors§

\ No newline at end of file +) -> bool

Implementors§

\ No newline at end of file diff --git a/echonet/transport/constant.PORT.html b/echonet/transport/constant.PORT.html index 2adde1cd..fb02177d 100644 --- a/echonet/transport/constant.PORT.html +++ b/echonet/transport/constant.PORT.html @@ -1 +1,2 @@ -PORT in echonet::transport - Rust

Constant echonet::transport::PORT

source ·
pub const PORT: u16 = 3610;
\ No newline at end of file +PORT in echonet::transport - Rust +

Constant echonet::transport::PORT

source ·
pub const PORT: u16 = 3610;
\ No newline at end of file diff --git a/echonet/transport/index.html b/echonet/transport/index.html index 9bade658..a3d0afed 100644 --- a/echonet/transport/index.html +++ b/echonet/transport/index.html @@ -1,2 +1,3 @@ -echonet::transport - Rust

Module echonet::transport

source ·
Expand description

Messaging transport manager module (Internal).

-

Structs

  • Manager handles all messaging packet between ECHONET-Lite nodes.
  • NotifytManager notifies recieved transport messages to the observers.

Constants

Traits

  • Observer defines a messaging packet interface between ECHONET-Lite nodes.

Type Definitions

\ No newline at end of file +echonet::transport - Rust +

Module echonet::transport

source ·
Expand description

Messaging transport manager module (Internal).

+

Structs§

  • Manager handles all messaging packet between ECHONET-Lite nodes.
  • NotifytManager notifies recieved transport messages to the observers.

Constants§

Traits§

  • Observer defines a messaging packet interface between ECHONET-Lite nodes.

Type Aliases§

\ No newline at end of file diff --git a/echonet/transport/struct.Manager.html b/echonet/transport/struct.Manager.html index bf1e258c..035ca857 100644 --- a/echonet/transport/struct.Manager.html +++ b/echonet/transport/struct.Manager.html @@ -1,12 +1,13 @@ -Manager in echonet::transport - Rust

Struct echonet::transport::Manager

source ·
pub struct Manager { /* private fields */ }
Expand description

Manager handles all messaging packet between ECHONET-Lite nodes.

-

Implementations§

source§

impl Manager

source

pub fn new() -> Manager

source

pub fn add_observer(&mut self, observer: ObserverObject) -> bool

source

pub fn send(&self, to_addr: SocketAddr, msg: &Message) -> bool

source

pub fn notify(&self, msg: &Message) -> bool

source

pub fn has_interface(&self, addr: IpAddr) -> bool

source

pub fn is_running(&self) -> bool

source

pub fn start(&mut self) -> bool

source

pub fn stop(&mut self) -> bool

Trait Implementations§

source§

impl Drop for Manager

source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+Manager in echonet::transport - Rust +

Struct echonet::transport::Manager

source ·
pub struct Manager { /* private fields */ }
Expand description

Manager handles all messaging packet between ECHONET-Lite nodes.

+

Implementations§

source§

impl Manager

source

pub fn new() -> Manager

source

pub fn add_observer(&mut self, observer: ObserverObject) -> bool

source

pub fn send(&self, to_addr: SocketAddr, msg: &Message) -> bool

source

pub fn notify(&self, msg: &Message) -> bool

source

pub fn has_interface(&self, addr: IpAddr) -> bool

source

pub fn is_running(&self) -> bool

source

pub fn start(&mut self) -> bool

source

pub fn stop(&mut self) -> bool

Trait Implementations§

source§

impl Drop for Manager

source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/echonet/transport/struct.NotifytManager.html b/echonet/transport/struct.NotifytManager.html index c56db3e0..6f771b73 100644 --- a/echonet/transport/struct.NotifytManager.html +++ b/echonet/transport/struct.NotifytManager.html @@ -1,12 +1,13 @@ -NotifytManager in echonet::transport - Rust
pub struct NotifytManager { /* private fields */ }
Expand description

NotifytManager notifies recieved transport messages to the observers.

-

Implementations§

source§

impl NotifytManager

source

pub fn new() -> NotifytManager

source

pub fn add_observer(&mut self, observer: ObserverObject) -> bool

source

pub fn observers(&self) -> &Vec<ObserverObject>

source

pub fn notify(&mut self, msg: &Message) -> bool

source

pub fn num_observers(&mut self) -> usize

source

pub fn start(&mut self) -> bool

source

pub fn stop(&mut self) -> bool

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+NotifytManager in echonet::transport - Rust +
pub struct NotifytManager { /* private fields */ }
Expand description

NotifytManager notifies recieved transport messages to the observers.

+

Implementations§

source§

impl NotifytManager

source

pub fn new() -> NotifytManager

source

pub fn add_observer(&mut self, observer: ObserverObject) -> bool

source

pub fn observers(&self) -> &Vec<ObserverObject>

source

pub fn notify(&mut self, msg: &Message) -> bool

source

pub fn num_observers(&mut self) -> usize

source

pub fn start(&mut self) -> bool

source

pub fn stop(&mut self) -> bool

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/echonet/transport/trait.Observer.html b/echonet/transport/trait.Observer.html index f5e18cda..caf31f30 100644 --- a/echonet/transport/trait.Observer.html +++ b/echonet/transport/trait.Observer.html @@ -1,5 +1,6 @@ -Observer in echonet::transport - Rust
pub trait Observer {
+Observer in echonet::transport - Rust
+    
pub trait Observer {
     // Required method
     fn message_received(&mut self, msg: &Message);
 }
Expand description

Observer defines a messaging packet interface between ECHONET-Lite nodes.

-

Required Methods§

source

fn message_received(&mut self, msg: &Message)

Implementations on Foreign Types§

source§

impl Observer for Arc<Mutex<DeviceNode>>

source§

fn message_received(&mut self, _msg: &Message)

source§

impl Observer for Arc<Mutex<ControllerNode>>

source§

fn message_received(&mut self, msg: &Message)

source§

impl Observer for Arc<Mutex<Node>>

source§

fn message_received(&mut self, req_msg: &Message)

Implementors§

\ No newline at end of file +

Required Methods§

source

fn message_received(&mut self, msg: &Message)

Implementations on Foreign Types§

source§

impl Observer for Arc<Mutex<Node>>

source§

fn message_received(&mut self, req_msg: &Message)

source§

impl Observer for Arc<Mutex<ControllerNode>>

source§

fn message_received(&mut self, msg: &Message)

source§

impl Observer for Arc<Mutex<DeviceNode>>

source§

fn message_received(&mut self, _msg: &Message)

Implementors§

\ No newline at end of file diff --git a/echonet/transport/type.ObserverObject.html b/echonet/transport/type.ObserverObject.html index 85b0acbf..92d54f4b 100644 --- a/echonet/transport/type.ObserverObject.html +++ b/echonet/transport/type.ObserverObject.html @@ -1 +1,2 @@ -ObserverObject in echonet::transport - Rust

Type Definition echonet::transport::ObserverObject

source ·
pub type ObserverObject = Arc<Mutex<dyn Observer + Send>>;
\ No newline at end of file +ObserverObject in echonet::transport - Rust +

Type Alias echonet::transport::ObserverObject

source ·
pub type ObserverObject = Arc<Mutex<dyn Observer + Send>>;

Aliased Type§

struct ObserverObject { /* private fields */ }
\ No newline at end of file diff --git a/echonet/type.ManufactureCode.html b/echonet/type.ManufactureCode.html index 553c17d5..cff04128 100644 --- a/echonet/type.ManufactureCode.html +++ b/echonet/type.ManufactureCode.html @@ -1,2 +1,3 @@ -ManufactureCode in echonet - Rust

Type Definition echonet::ManufactureCode

source ·
pub type ManufactureCode = u32;
Expand description

ManufactureCode represents a manufacturer code registerd by the ECHONET CONSORTIUM.

+ManufactureCode in echonet - Rust +

Type Alias echonet::ManufactureCode

source ·
pub type ManufactureCode = u32;
Expand description

ManufactureCode represents a manufacturer code registerd by the ECHONET CONSORTIUM.

\ No newline at end of file diff --git a/echonet/type.ObjectCode.html b/echonet/type.ObjectCode.html index 478504fd..06a7a599 100644 --- a/echonet/type.ObjectCode.html +++ b/echonet/type.ObjectCode.html @@ -1,2 +1,3 @@ -ObjectCode in echonet - Rust

Type Definition echonet::ObjectCode

source ·
pub type ObjectCode = u32;
Expand description

ObjectCode represents an ECHONET-Lite object code.

+ObjectCode in echonet - Rust +

Type Alias echonet::ObjectCode

source ·
pub type ObjectCode = u32;
Expand description

ObjectCode represents an ECHONET-Lite object code.

\ No newline at end of file diff --git a/echonet/type.RequestHandlerObject.html b/echonet/type.RequestHandlerObject.html index 7d1526ee..0192f3b4 100644 --- a/echonet/type.RequestHandlerObject.html +++ b/echonet/type.RequestHandlerObject.html @@ -1,2 +1,3 @@ -RequestHandlerObject in echonet - Rust

Type Definition echonet::RequestHandlerObject

source ·
pub type RequestHandlerObject = Arc<Mutex<dyn RequestHandler + Send>>;
Expand description

RequestHandlerObject represents a request message handler object.

-
\ No newline at end of file +RequestHandlerObject in echonet - Rust +

Type Alias echonet::RequestHandlerObject

source ·
pub type RequestHandlerObject = Arc<Mutex<dyn RequestHandler + Send>>;
Expand description

RequestHandlerObject represents a request message handler object.

+

Aliased Type§

struct RequestHandlerObject { /* private fields */ }
\ No newline at end of file diff --git a/echonet/util/index.html b/echonet/util/index.html index b7d97ac7..ca5b9e87 100644 --- a/echonet/util/index.html +++ b/echonet/util/index.html @@ -1,2 +1,3 @@ -echonet::util - Rust

Module echonet::util

source ·
Expand description

Utility function module.

-

Structs

  • Bytes offers encoding and decoding utility functions between byte array and integers.
  • OID generates a unique identification number wit the specified manufacture code.
\ No newline at end of file +echonet::util - Rust +

Module echonet::util

source ·
Expand description

Utility function module.

+

Structs§

  • Bytes offers encoding and decoding utility functions between byte array and integers.
  • OID generates a unique identification number wit the specified manufacture code.
\ No newline at end of file diff --git a/echonet/util/struct.Bytes.html b/echonet/util/struct.Bytes.html index ffeaf0f7..0d190d69 100644 --- a/echonet/util/struct.Bytes.html +++ b/echonet/util/struct.Bytes.html @@ -1,12 +1,13 @@ -Bytes in echonet::util - Rust

Struct echonet::util::Bytes

source ·
pub struct Bytes {}
Expand description

Bytes offers encoding and decoding utility functions between byte array and integers.

-

Implementations§

source§

impl Bytes

source

pub fn from_u32(val: u32, bytes: &mut [u8])

source

pub fn to_u32(bytes: &[u8]) -> u32

Auto Trait Implementations§

§

impl RefUnwindSafe for Bytes

§

impl Send for Bytes

§

impl Sync for Bytes

§

impl Unpin for Bytes

§

impl UnwindSafe for Bytes

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+Bytes in echonet::util - Rust +

Struct echonet::util::Bytes

source ·
pub struct Bytes {}
Expand description

Bytes offers encoding and decoding utility functions between byte array and integers.

+

Implementations§

source§

impl Bytes

source

pub fn from_u32(val: u32, bytes: &mut [u8])

source

pub fn to_u32(bytes: &[u8]) -> u32

Auto Trait Implementations§

§

impl RefUnwindSafe for Bytes

§

impl Send for Bytes

§

impl Sync for Bytes

§

impl Unpin for Bytes

§

impl UnwindSafe for Bytes

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/echonet/util/struct.OID.html b/echonet/util/struct.OID.html index 404037f8..c7472ce1 100644 --- a/echonet/util/struct.OID.html +++ b/echonet/util/struct.OID.html @@ -1,12 +1,13 @@ -OID in echonet::util - Rust

Struct echonet::util::OID

source ·
pub struct OID { /* private fields */ }
Expand description

OID generates a unique identification number wit the specified manufacture code.

-

Implementations§

source§

impl OID

source

pub fn new(code: ObjectCode) -> OID

source

pub fn bytes(&self) -> &[u8]

Auto Trait Implementations§

§

impl RefUnwindSafe for OID

§

impl Send for OID

§

impl Sync for OID

§

impl Unpin for OID

§

impl UnwindSafe for OID

Blanket Implementations§

source§

impl<T> Any for Twhere - T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere - T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere - T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

-
source§

impl<T, U> Into<U> for Twhere - U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+OID in echonet::util - Rust +

Struct echonet::util::OID

source ·
pub struct OID { /* private fields */ }
Expand description

OID generates a unique identification number wit the specified manufacture code.

+

Implementations§

source§

impl OID

source

pub fn new(code: ObjectCode) -> OID

source

pub fn bytes(&self) -> &[u8]

Auto Trait Implementations§

§

impl RefUnwindSafe for OID

§

impl Send for OID

§

impl Sync for OID

§

impl Unpin for OID

§

impl UnwindSafe for OID

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of -From<T> for U chooses to do.

-
source§

impl<T, U> TryFrom<U> for Twhere - U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere - U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file +From<T> for U chooses to do.

+
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
\ No newline at end of file diff --git a/help.html b/help.html index 6159a8d9..849cc558 100644 --- a/help.html +++ b/help.html @@ -1 +1,2 @@ -Rustdoc help

Rustdoc help

Back
\ No newline at end of file +Help +

Rustdoc help

Back
\ No newline at end of file diff --git a/implementors/core/clone/trait.Clone.js b/implementors/core/clone/trait.Clone.js deleted file mode 100644 index 593c47b3..00000000 --- a/implementors/core/clone/trait.Clone.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"echonet":[["impl Clone for Message"],["impl Clone for Property"],["impl Clone for ESV"],["impl Clone for Property"],["impl Clone for PropertyRule"],["impl Clone for RemoteNode"],["impl Clone for Object"],["impl Clone for PropertyEnum"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/cmp/trait.Eq.js b/implementors/core/cmp/trait.Eq.js deleted file mode 100644 index f4a56ecf..00000000 --- a/implementors/core/cmp/trait.Eq.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"echonet":[["impl Eq for RemoteNode"],["impl Eq for Object"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/cmp/trait.PartialEq.js b/implementors/core/cmp/trait.PartialEq.js deleted file mode 100644 index 81a3f301..00000000 --- a/implementors/core/cmp/trait.PartialEq.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"echonet":[["impl PartialEq<ESV> for ESV"],["impl PartialEq<RemoteNode> for RemoteNode"],["impl PartialEq<Object> for Object"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/hash/trait.Hash.js b/implementors/core/hash/trait.Hash.js deleted file mode 100644 index 4f982751..00000000 --- a/implementors/core/hash/trait.Hash.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"echonet":[["impl Hash for Object"],["impl Hash for Property"],["impl Hash for RemoteNode"],["impl Hash for PropertyEnum"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/marker/trait.Copy.js b/implementors/core/marker/trait.Copy.js deleted file mode 100644 index 8f8410df..00000000 --- a/implementors/core/marker/trait.Copy.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"echonet":[["impl Copy for ESV"],["impl Copy for PropertyRule"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/ops/drop/trait.Drop.js b/implementors/core/ops/drop/trait.Drop.js deleted file mode 100644 index 54b0acf6..00000000 --- a/implementors/core/ops/drop/trait.Drop.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = { -"echonet":[["impl Drop for Manager"],["impl Drop for Node"],["impl Drop for Device"],["impl Drop for Controller"]] -};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/search-index.js b/search-index.js index cb23faa8..c2bd8000 100644 --- a/search-index.js +++ b/search-index.js @@ -1,5 +1,8 @@ -var searchIndex = JSON.parse('{\ -"echonet":{"doc":"echonet (uecho-rs)","t":"DDDGDDGNNDDEDIGNDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLALDLLLLLLLLLLLLLLEDNNNNNDGNNNGGRRNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDDIGRLLLLLLLLLLLLLKLLLLLLLLLLLLLLLLLDDLLLLLLLLLLLLLLLLLL","n":["Controller","Device","Manufacture","ManufactureCode","Node","Object","ObjectCode","Optional","Prohibited","Property","PropertyEnum","PropertyRule","RemoteNode","RequestHandler","RequestHandlerObject","Required","StandardDatabase","add_data","add_enum","add_manufacture","add_object","add_object","add_object","add_observer","add_observer","add_property","add_request_handler","add_standard_properties","addr","anno_attribute","annouce","annouce_property","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","capacity","class_code","class_group_code","class_name","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","code","code","code","code","code","data","data_as_byte","data_as_bytes","data_as_int","data_type","description","drop","drop","drop","enums","eq","eq","equals_data","equals_property_data","equivalent","equivalent","fault_status","find_enum","find_manufacture","find_object","find_object","find_object","find_object_mut","find_property","find_property_mut","from","from","from","from","from","from","from","from","from","from","from_code","from_message","has_interface","has_property","hash","hash","hash","hash","id","init_manufactures","init_node_profile_object","init_objects","installation_location","instance_code","into","into","into","into","into","into","into","into","into","into","is_announce_required","is_announceable","is_read_required","is_readable","is_readonly","is_running","is_writable","is_write_required","is_writeonly","log","manufacturer_code","message_received","name","name","name","name","new","new","new","new","new","new","new","new","new","new_with_node","new_with_node","node","node_profile_object","nodes","notify","objects","objects","objects_mut","operating_status","post_message","post_message","properties","property","property_data","property_data_as_byte","property_data_as_bytes","property_data_as_int","property_request_received","protocol","read_attribute","search","search_object","send_message","send_message","set_addr","set_anno_attribute","set_byte_data","set_bytes_data","set_capacity","set_class_code","set_class_group_code","set_class_name","set_code","set_code","set_code","set_code","set_data","set_data_type","set_description","set_fault_status","set_fault_status","set_id","set_installation_location","set_installation_location","set_instance_code","set_int_data","set_manufacturer_code","set_manufacturer_code","set_name","set_name","set_name","set_name","set_operating_status","set_operating_status","set_property","set_property_byte","set_property_bytes","set_property_data","set_property_int","set_read_attribute","set_request_handler","set_standard_version","set_standard_version","set_write_attribute","shared","size","standard_version","standard_version","start","start","start","stop","stop","stop","to_owned","to_owned","to_owned","to_owned","to_owned","transport","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","util","write_attribute","Logger","borrow","borrow_mut","enabled","flush","from","init","into","log","new","set_level","shared","try_from","try_into","type_id","ESV","Message","Notification","NotificationRequest","NotificationRequestError","NotificationResponse","NotificationResponseRequired","Property","PropertyCode","ReadRequest","ReadRequestError","ReadResponse","Result","TID","TID_MAX","TID_MIN","Unknown","WriteReadRequest","WriteReadRequestError","WriteReadResponse","WriteRequest","WriteRequestError","WriteRequestResponseRequired","WriteRequestResponseRequiredError","WriteResponse","add_property","add_property_get","add_property_set","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","bytes","clone","clone","clone","clone_into","clone_into","clone_into","code","data","deoj","eq","equals","equals","esv","fmt","fmt","fmt","from","from","from","from","from","from","from_bytes","from_u8","has_tid","into","into","into","is_error_response","is_format1","is_node_profile_message","is_notification_response","is_request","is_response","is_unicast_response","iter","new","new","opc","opc_get","opc_set","parse","parse","properties","properties_get","properties_set","property","property_get","property_set","seoj","set_code","set_data","set_deoj","set_esv","set_from","set_seoj","set_tid","size","tid","to_owned","to_owned","to_owned","to_string","to_string","to_u8","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","Manager","NotifytManager","Observer","ObserverObject","PORT","add_observer","add_observer","borrow","borrow","borrow_mut","borrow_mut","drop","from","from","has_interface","into","into","is_running","message_received","new","new","notify","notify","num_observers","observers","send","start","start","stop","stop","try_from","try_from","try_into","try_into","type_id","type_id","Bytes","OID","borrow","borrow","borrow_mut","borrow_mut","bytes","from","from","from_u32","into","into","new","to_u32","try_from","try_from","try_into","try_into","type_id","type_id"],"q":[[0,"echonet"],[268,"echonet::log"],[283,"echonet::protocol"],[392,"echonet::transport"],[428,"echonet::util"]],"d":["Controller represents an ECHONET-Lite controller node to …","Device represents an ECHONET-Lite device node. The device …","Manufacture represents a manufacturer name and code …","ManufactureCode represents a manufacturer code registerd …","Node represents an ECHONET-Lite node which contains …","Each ECHONET-Lite node has objects. Object represents an …","ObjectCode represents an ECHONET-Lite object code.","","","Each ECHONET-Lite object has properties. Property …","PropertyEnum represents an ECHONET-Lite property …","PropertyRule represents an ECHONET-Lite property access …","RemoteNode represents an ECHONET-Lite node discovered by …","RequestHandler defines a request message handler interface.","RequestHandlerObject represents a request message handler …","","StandardDatabase provides a standard database for …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the object code.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","Logger function module.","","","","","","","Create a new controller.","","Creates a new device with a specified object code. The …","","","","","","","Create a new controller with the node to which it belongs.","Creates a new device with a specified object code and …","Returns the parent local node to which the device belongs.","","Returns all searched remote nodes.","","","","","","Posts the specified message to the remote node and waits …","","","Gets the specified property data if the device node has …","","","","","","messaging packet encoder and decoder module.","","Searches all ECHONET-Lite nodes on the local network.","Searches only the specified object nodes on the local …","Sends the specified message to the specified remote node. …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Sets the data into the specified property if the device …","","","","","","","","","","","","","","Starts the controller node to communicate with other …","Starts the device to communicate with other ECHONET-Lite …","","Stops the controller node, and clears all searched remote …","Stops the device.","","","","","","","Messaging transport manager module (Internal).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Utility function module.","","Logger represents a default logger instance.","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","","","ESV represents an ECHONET-Lite service (ESV) code as …","Message represents a messaging packet between ECHONET-Lite …","","","","","","Each ECHONET-Lite message has properties. Property …","PropertyCode represents an ECHONET-Lite property code …","","","","A Result type for protocol decoding and encoding …","TID represents an ECHONET-Lite transaction identification …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","","Returns the argument unchanged.","","Returns the argument unchanged.","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Manager handles all messaging packet between ECHONET-Lite …","NotifytManager notifies recieved transport messages to the …","Observer defines a messaging packet interface between …","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","Bytes offers encoding and decoding utility functions …","OID generates a unique identification number wit the …","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","Calls U::from(self).","Calls U::from(self).","","","","","","","",""],"i":[0,0,0,0,0,0,0,16,16,0,0,0,0,0,0,16,0,1,1,6,6,9,10,11,9,8,9,8,10,1,9,9,11,6,19,7,9,8,4,1,10,16,11,6,19,7,9,8,4,1,10,16,1,8,8,8,8,4,1,10,16,8,4,1,10,16,19,7,8,4,1,1,1,1,1,1,4,11,19,9,1,8,10,1,8,8,10,8,1,6,6,9,10,9,8,8,11,6,19,7,9,8,4,1,10,16,8,10,9,8,8,4,1,10,8,6,9,6,8,8,11,6,19,7,9,8,4,1,10,16,1,1,1,1,1,9,1,1,1,0,8,8,7,8,4,1,11,6,19,7,9,8,4,1,10,11,19,19,9,11,9,9,10,10,8,11,9,8,19,8,8,8,8,47,0,1,11,11,11,9,10,1,1,1,1,8,8,8,7,8,4,1,1,1,4,19,8,8,19,8,8,1,19,8,7,8,4,1,19,8,19,8,8,8,8,1,19,19,8,1,6,1,19,8,11,19,9,11,19,9,8,4,1,10,16,0,11,6,19,7,9,8,4,1,10,16,11,6,19,7,9,8,4,1,10,16,11,6,19,7,9,8,4,1,10,16,0,1,0,36,36,36,36,36,36,36,36,36,36,36,36,36,36,0,0,31,31,31,31,31,0,0,31,31,31,0,0,0,0,31,31,31,31,31,31,31,31,31,25,25,25,25,32,31,25,32,31,25,25,32,31,25,32,31,32,32,25,31,25,32,25,25,31,31,25,25,32,32,32,31,25,31,25,25,32,31,31,25,25,31,31,31,31,31,25,32,25,25,25,25,32,25,25,25,25,25,25,25,32,32,25,25,25,25,25,32,25,25,32,31,25,31,31,25,32,31,25,32,31,25,32,31,0,0,0,0,0,44,45,44,45,44,45,44,44,45,44,44,45,44,48,44,45,44,45,45,45,44,44,45,44,45,44,45,44,45,44,45,0,0,49,46,49,46,46,49,46,49,49,46,46,49,49,46,49,46,49,46],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[1,[3,[2]]],1],[[1,4],5],[[6,7],5],[[6,8],5],[[9,8],5],[[10,8],5],[[11,12],5],[[9,12],5],[[8,1],5],[[9,13],5],[[8,14],5],[10,15],[1,16],[9,5],[[9,8,1],5],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[1,17],[8,2],[8,2],[8,18],[8,8],[4,4],[1,1],[10,10],[16,16],[[]],[[]],[[]],[[]],[[]],[19,14],[7,20],[8,14],[4,21],[1,2],[1,[[22,[2]]]],[1,2],[1,[[3,[2]]]],[1,21],[1,18],[4,18],[11],[19],[9],[1,[[23,[21,4]]]],[[8,8],5],[[10,10],5],[[1,[3,[2]]],5],[[8,2,[3,[2]]],5],[[],5],[[],5],[8,[[24,[2]]]],[[1,21],[[24,[4]]]],[[6,20],[[24,[7]]]],[[6,14],[[24,[8]]]],[[9,14],[[24,[8]]]],[[10,14],[[24,[8]]]],[[9,14],[[24,[8]]]],[[8,2],[[24,[1]]]],[[8,2],[[24,[1]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[14,8],[25,10],[[9,26],5],[[8,2],5],[[8,27]],[[4,27]],[[1,27]],[[10,27]],[8,[[24,[[3,[2]]]]]],[6],[9],[6],[8,[[24,[2]]]],[8,2],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[1,5],[1,5],[1,5],[1,5],[1,5],[9,5],[1,5],[1,5],[1,5],0,[8,1],[[8,25],[[24,[25]]]],[7,18],[8,18],[4,18],[1,18],[[],11],[[],6],[14,19],[[],7],[[],[[29,[[28,[9]]]]]],[[],8],[[],4],[[],1],[[],10],[[[29,[[28,[9]]]]],11],[[14,[29,[[28,[9]]]]],19],[19,[[29,[[28,[9]]]]]],[9,[[24,[8]]]],[11,[[22,[10]]]],[[9,25],5],[9,[[22,[8]]]],[10,[[22,[8]]]],[10,[[22,[8]]]],[8,[[24,[2]]]],[[11,10,25],[[30,[25]]]],[[9,15,25],[[30,[25]]]],[8,[[23,[2,1]]]],[[19,2],[[24,[[22,[2]]]]]],[[8,2],[[24,[[22,[2]]]]]],[[8,2],[[24,[2]]]],[[8,2],[[24,[[3,[2]]]]]],[[8,2],[[24,[21]]]],[[8,31,32],5],0,[1,16],[11,5],[[11,14],5],[[11,10,25],5],[[9,15,25],5],[[10,15]],[[1,16],1],[[1,2],1],[[1,[3,[2]]],1],[[1,17],1],[[8,2],8],[[8,2],8],[[8,18],8],[[7,20]],[[8,14],8],[[4,21],4],[[1,2],1],[[1,[3,[2]]],1],[[1,18],1],[[4,18],4],[[19,5],5],[[8,5],5],[[8,[3,[2]]],5],[[19,2],5],[[8,2],5],[[8,2],8],[[1,21,17],1],[[19,21],5],[[8,21],5],[[7,18]],[[8,18],8],[[4,18],4],[[1,18],1],[[19,5],5],[[8,5],5],[[19,2,[3,[2]]],5],[[8,2,2],5],[[8,2,[3,[2]]],5],[[8,2,[3,[2]]],5],[[8,2,21,17],5],[[1,16],1],[[19,13]],[[19,2],5],[[8,2],5],[[1,16],1],[[],[[33,[6]]]],[1,17],[19,[[24,[[22,[2]]]]]],[8,[[24,[2]]]],[11,5],[19,5],[9,5],[11,5],[19,5],[9,5],[[]],[[]],[[]],[[]],[[]],0,[[],34],[[],34],[[],34],[[],34],[[],34],[[],34],[[],34],[[],34],[[],34],[[],34],[[],34],[[],34],[[],34],[[],34],[[],34],[[],34],[[],34],[[],34],[[],34],[[],34],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],[[],35],0,[1,16],0,[[]],[[]],[[36,37],5],[36],[[]],[[]],[[]],[[36,38]],[[],36],[[36,39]],[[],36],[[],34],[[],34],[[],35],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[25,32],25],[[25,32],25],[[25,32],25],[[]],[[]],[[]],[[]],[[]],[[]],[25,[[22,[2]]]],[25,25],[32,32],[31,31],[[]],[[]],[[]],[32,40],[32,[[22,[2]]]],[25,21],[[31,31],5],[[25,25],5],[[32,32],5],[25,31],[[25,41],42],[[31,41],42],[[31,41],42],[[]],[25,15],[1,32],[[]],[[40,[22,[2]]],32],[[]],[[[3,[2]]],25],[2,31],[25,5],[[]],[[]],[[]],[31,5],[25,5],[25,5],[31,5],[31,5],[31,5],[31,5],0,[[],25],[[],32],[25,17],[25,17],[25,17],[[25,[3,[2]]],5],[[32,[3,[2]]],5],[25,[[22,[32]]]],[25,[[22,[32]]]],[25,[[22,[32]]]],[[25,17],32],[[25,17],32],[[25,17],32],[25,21],[[32,40],32],[[32,[22,[2]]],32],[[25,21],25],[[25,31],25],[[25,15],25],[[25,21],25],[[25,43],25],[32,17],[25,43],[[]],[[]],[[]],[[],18],[[],18],[31,2],[[],34],[[],34],[[],34],[[],34],[[],34],[[],34],[[],35],[[],35],[[],35],0,0,0,0,0,[[44,12],5],[[45,12],5],[[]],[[]],[[]],[[]],[44],[[]],[[]],[[44,26],5],[[]],[[]],[44,5],[25],[[],44],[[],45],[[44,25],5],[[45,25],5],[45,17],[45,[[22,[12]]]],[[44,15,25],5],[44,5],[45,5],[44,5],[45,5],[[],34],[[],34],[[],34],[[],34],[[],35],[[],35],0,0,[[]],[[]],[[]],[[]],[46,[[3,[2]]]],[[]],[[]],[[21,[3,[2]]]],[[]],[[]],[14,46],[[[3,[2]]],21],[[],34],[[],34],[[],34],[[],34],[[],35],[[],35]],"c":[],"p":[[3,"Property"],[15,"u8"],[15,"slice"],[3,"PropertyEnum"],[15,"bool"],[3,"StandardDatabase"],[3,"Manufacture"],[3,"Object"],[3,"Node"],[3,"RemoteNode"],[3,"Controller"],[6,"ObserverObject"],[6,"RequestHandlerObject"],[6,"ObjectCode"],[4,"SocketAddr"],[4,"PropertyRule"],[15,"usize"],[3,"String"],[3,"Device"],[6,"ManufactureCode"],[15,"u32"],[3,"Vec"],[3,"Values"],[4,"Option"],[3,"Message"],[4,"IpAddr"],[8,"Hasher"],[3,"Mutex"],[3,"Arc"],[3,"Receiver"],[4,"ESV"],[3,"Property"],[3,"Lazy"],[4,"Result"],[3,"TypeId"],[3,"Logger"],[3,"Metadata"],[3,"Record"],[4,"LevelFilter"],[6,"PropertyCode"],[3,"Formatter"],[6,"Result"],[6,"TID"],[3,"Manager"],[3,"NotifytManager"],[3,"OID"],[8,"RequestHandler"],[8,"Observer"],[3,"Bytes"]]}\ -}'); -if (typeof window !== 'undefined' && window.initSearch) {window.initSearch(searchIndex)}; -if (typeof exports !== 'undefined') {exports.searchIndex = searchIndex}; +var searchIndex = new Map(JSON.parse('[\ +["echonet",{"doc":"echonet (uecho-rs)","t":"FFFIFFIPPFFGFKIPFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNFNNNNNNNNNNNNNNGPFPPPPPPFIPPPIISSPPPPPPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNFFKISNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNFFNNNNNNNNNNNNNNNNNN","n":["Controller","Device","Manufacture","ManufactureCode","Node","Object","ObjectCode","Optional","Prohibited","Property","PropertyEnum","PropertyRule","RemoteNode","RequestHandler","RequestHandlerObject","Required","StandardDatabase","add_data","add_enum","add_manufacture","add_object","add_object","add_object","add_observer","add_observer","add_property","add_request_handler","add_standard_properties","addr","anno_attribute","annouce","annouce_property","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","capacity","class_code","class_group_code","class_name","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","code","code","code","code","code","data","data_as_byte","data_as_bytes","data_as_int","data_type","description","drop","drop","drop","enums","eq","eq","equals_data","equals_property_data","fault_status","find_enum","find_manufacture","find_object","find_object","find_object","find_object_mut","find_property","find_property_mut","from","from","from","from","from","from","from","from","from","from","from_code","from_message","has_interface","has_property","hash","hash","hash","hash","id","init_manufactures","init_node_profile_object","init_objects","installation_location","instance_code","into","into","into","into","into","into","into","into","into","into","is_announce_required","is_announceable","is_read_required","is_readable","is_readonly","is_running","is_writable","is_write_required","is_writeonly","log","manufacturer_code","message_received","name","name","name","name","new","new","new","new","new","new","new","new","new","new_with_node","new_with_node","node","node_profile_object","nodes","notify","objects","objects","objects_mut","operating_status","post_message","post_message","properties","property","property_data","property_data_as_byte","property_data_as_bytes","property_data_as_int","property_request_received","protocol","read_attribute","search","search_object","send_message","send_message","set_addr","set_anno_attribute","set_byte_data","set_bytes_data","set_capacity","set_class_code","set_class_group_code","set_class_name","set_code","set_code","set_code","set_code","set_data","set_data_type","set_description","set_fault_status","set_fault_status","set_id","set_installation_location","set_installation_location","set_instance_code","set_int_data","set_manufacturer_code","set_manufacturer_code","set_name","set_name","set_name","set_name","set_operating_status","set_operating_status","set_property","set_property_byte","set_property_bytes","set_property_data","set_property_int","set_read_attribute","set_request_handler","set_standard_version","set_standard_version","set_write_attribute","shared","size","standard_version","standard_version","start","start","start","stop","stop","stop","to_owned","to_owned","to_owned","to_owned","to_owned","transport","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","util","write_attribute","Logger","borrow","borrow_mut","enabled","flush","from","init","into","log","new","set_level","shared","try_from","try_into","type_id","ESV","Err","Message","Notification","NotificationRequest","NotificationRequestError","NotificationResponse","NotificationResponseRequired","Ok","Property","PropertyCode","ReadRequest","ReadRequestError","ReadResponse","Result","TID","TID_MAX","TID_MIN","Unknown","WriteReadRequest","WriteReadRequestError","WriteReadResponse","WriteRequest","WriteRequestError","WriteRequestResponseRequired","WriteRequestResponseRequiredError","WriteResponse","add_property","add_property_get","add_property_set","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","bytes","clone","clone","clone","clone_into","clone_into","clone_into","code","data","deoj","eq","equals","equals","esv","fmt","fmt","fmt","from","from","from","from","from","from","from_bytes","from_u8","has_tid","into","into","into","is_error_response","is_format1","is_node_profile_message","is_notification_response","is_request","is_response","is_unicast_response","iter","new","new","opc","opc_get","opc_set","parse","parse","properties","properties_get","properties_set","property","property_get","property_set","seoj","set_code","set_data","set_deoj","set_esv","set_from","set_seoj","set_tid","size","tid","to_owned","to_owned","to_owned","to_string","to_string","to_u8","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","Manager","NotifytManager","Observer","ObserverObject","PORT","add_observer","add_observer","borrow","borrow","borrow_mut","borrow_mut","drop","from","from","has_interface","into","into","is_running","message_received","new","new","notify","notify","num_observers","observers","send","start","start","stop","stop","try_from","try_from","try_into","try_into","type_id","type_id","Bytes","OID","borrow","borrow","borrow_mut","borrow_mut","bytes","from","from","from_u32","into","into","new","to_u32","try_from","try_from","try_into","try_into","type_id","type_id"],"q":[[0,"echonet"],[266,"echonet::log"],[281,"echonet::protocol"],[392,"echonet::transport"],[428,"echonet::util"],[448,"core::net::socket_addr"],[449,"alloc::string"],[450,"alloc::vec"],[451,"std::collections::hash::map"],[452,"core::option"],[453,"core::net::ip_addr"],[454,"core::hash"],[455,"std::sync::mutex"],[456,"alloc::sync"],[457,"std::sync::mpsc"],[458,"once_cell::sync"],[459,"core::result"],[460,"core::any"],[461,"log"],[462,"log"],[463,"core::fmt"]],"d":["Controller represents an ECHONET-Lite controller node to …","Device represents an ECHONET-Lite device node. The device …","Manufacture represents a manufacturer name and code …","ManufactureCode represents a manufacturer code registerd …","Node represents an ECHONET-Lite node which contains …","Each ECHONET-Lite node has objects. Object represents an …","ObjectCode represents an ECHONET-Lite object code.","","","Each ECHONET-Lite object has properties. Property …","PropertyEnum represents an ECHONET-Lite property …","PropertyRule represents an ECHONET-Lite property access …","RemoteNode represents an ECHONET-Lite node discovered by …","RequestHandler defines a request message handler interface.","RequestHandlerObject represents a request message handler …","","StandardDatabase provides a standard database for …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the object code.","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","","","","","","","","","","","","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","Logger function module.","","","","","","","Create a new controller.","","Creates a new device with a specified object code. The …","","","","","","","Create a new controller with the node to which it belongs.","Creates a new device with a specified object code and …","Returns the parent local node to which the device belongs.","","Returns all searched remote nodes.","","","","","","Posts the specified message to the remote node and waits …","","","Gets the specified property data if the device node has …","","","","","","messaging packet encoder and decoder module.","","Searches all ECHONET-Lite nodes on the local network.","Searches only the specified object nodes on the local …","Sends the specified message to the specified remote node. …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Sets the data into the specified property if the device …","","","","","","","","","","","","","","Starts the controller node to communicate with other …","Starts the device to communicate with other ECHONET-Lite …","","Stops the controller node, and clears all searched remote …","Stops the device.","","","","","","","Messaging transport manager module (Internal).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Utility function module.","","Logger represents a default logger instance.","","","","","Returns the argument unchanged.","","Calls U::from(self).","","","","","","","","ESV represents an ECHONET-Lite service (ESV) code as …","Contains the error value","Message represents a messaging packet between ECHONET-Lite …","","","","","","Contains the success value","Each ECHONET-Lite message has properties. Property …","PropertyCode represents an ECHONET-Lite property code …","","","","A Result type for protocol decoding and encoding …","TID represents an ECHONET-Lite transaction identification …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the argument unchanged.","","Returns the argument unchanged.","","","Returns the argument unchanged.","","","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Manager handles all messaging packet between ECHONET-Lite …","NotifytManager notifies recieved transport messages to the …","Observer defines a messaging packet interface between …","","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","Calls U::from(self).","Calls U::from(self).","","","","","","","","","","","","","","","","","","","","Bytes offers encoding and decoding utility functions …","OID generates a unique identification number wit the …","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","","Calls U::from(self).","Calls U::from(self).","","","","","","","",""],"i":[0,0,0,0,0,0,0,16,16,0,0,0,0,0,0,16,0,1,1,6,6,9,10,11,9,8,9,8,10,1,9,9,11,6,20,7,9,8,4,1,10,16,11,6,20,7,9,8,4,1,10,16,1,8,8,8,8,4,1,10,16,8,4,1,10,16,20,7,8,4,1,1,1,1,1,1,4,11,20,9,1,8,10,1,8,8,1,6,6,9,10,9,8,8,11,6,20,7,9,8,4,1,10,16,8,10,9,8,8,4,1,10,8,6,9,6,8,8,11,6,20,7,9,8,4,1,10,16,1,1,1,1,1,9,1,1,1,0,8,8,7,8,4,1,11,6,20,7,9,8,4,1,10,11,20,20,9,11,9,9,10,10,8,11,9,8,20,8,8,8,8,32,0,1,11,11,11,9,10,1,1,1,1,8,8,8,7,8,4,1,1,1,4,20,8,8,20,8,8,1,20,8,7,8,4,1,20,8,20,8,8,8,8,1,20,20,8,1,6,1,20,8,11,20,9,11,20,9,8,4,1,10,16,0,11,6,20,7,9,8,4,1,10,16,11,6,20,7,9,8,4,1,10,16,11,6,20,7,9,8,4,1,10,16,0,1,0,38,38,38,38,38,38,38,38,38,38,38,38,38,38,0,50,0,33,33,33,33,33,50,0,0,33,33,33,0,0,0,0,33,33,33,33,33,33,33,33,33,26,26,26,26,34,33,26,34,33,26,26,34,33,26,34,33,34,34,26,33,26,34,26,26,33,33,26,26,34,34,34,33,26,33,26,26,34,33,33,26,26,33,33,33,33,33,26,34,26,26,26,26,34,26,26,26,26,26,26,26,34,34,26,26,26,26,26,34,26,26,34,33,26,33,33,26,34,33,26,34,33,26,34,33,0,0,0,0,0,46,47,46,47,46,47,46,46,47,46,46,47,46,48,46,47,46,47,47,47,46,46,47,46,47,46,47,46,47,46,47,0,0,51,49,51,49,49,51,49,51,51,49,49,51,51,49,51,49,51,49],"f":"`````````````````{{b{f{d}}}b}{{bh}j}{{ln}j}{{lA`}j}{{AbA`}j}{{AdA`}j}{{AfAh}j}{{AbAh}j}{{A`b}j}{{AbAj}j}{{A`Al}j}{AdAn}{bB`}{Abj}{{AbA`b}j}{ce{}{}}0000000000000000000{bBb}{A`d}0{A`Bd}{A`A`}{hh}{bb}{AdAd}{B`B`}{{ce}Bf{}{}}0000{BhAl}{nBj}{A`Al}{hBl}{bd}{b{{Bn{d}}}}1{b{{f{d}}}}{bBl}{bBd}{hBd}{AfBf}{BhBf}{AbBf}{b{{C`{Blh}}}}{{A`A`}j}{{AdAd}j}{{b{f{d}}}j}{{A`d{f{d}}}j}{A`{{Cb{d}}}}{{bBl}{{Cb{h}}}}{{lBj}{{Cb{n}}}}{{lAl}{{Cb{A`}}}}{{AbAl}{{Cb{A`}}}}{{AdAl}{{Cb{A`}}}}1{{A`d}{{Cb{b}}}}0{cc{}}000000000{AlA`}{CdAd}{{AbCf}j}{{A`d}j}{{A`c}BfCh}{{hc}BfCh}{{bc}BfCh}{{Adc}BfCh}{A`{{Cb{{f{d}}}}}}{lBf}{AbBf}1{A`{{Cb{d}}}}{A`d}{ce{}{}}000000000{bj}0000{Abj}111`{A`b}{{A`Cd}{{Cb{Cd}}}}{nBd}{A`Bd}{hBd}{bBd}{{}Af}{{}l}{AlBh}{{}n}{{}{{Cl{{Cj{Ab}}}}}}{{}A`}{{}h}{{}b}{{}Ad}{{{Cl{{Cj{Ab}}}}}Af}{{Al{Cl{{Cj{Ab}}}}}Bh}{Bh{{Cl{{Cj{Ab}}}}}}{Ab{{Cb{A`}}}}{Af{{Bn{Ad}}}}{{AbCd}j}{Ab{{Bn{A`}}}}{Ad{{Bn{A`}}}}0{A`{{Cb{d}}}}{{AfAdCd}{{Cn{Cd}}}}{{AbAnCd}{{Cn{Cd}}}}{A`{{C`{db}}}}{{Bhd}{{Cb{{Bn{d}}}}}}{{A`d}{{Cb{{Bn{d}}}}}}{{A`d}{{Cb{d}}}}{{A`d}{{Cb{{f{d}}}}}}{{A`d}{{Cb{Bl}}}}{{D`A`DbDd}j}`{bB`}{Afj}{{AfAl}j}{{AfAdCd}j}{{AbAnCd}j}{{AdAn}Bf}{{bB`}b}{{bd}b}{{b{f{d}}}b}{{bBb}b}{{A`d}A`}0{{A`Bd}A`}{{nBj}Bf}{{A`Al}A`}{{hBl}h}76{{bBd}b}{{hBd}h}{{Bhj}j}{{A`j}j}{{A`{f{d}}}j}{{Bhd}j}{{A`d}j};{{bBlBb}b}{{BhBl}j}{{A`Bl}j}{{nBd}Bf}>9:87{{Bhd{f{d}}}j}{{A`dd}j}{{A`d{f{d}}}j}0{{A`dBlBb}j}{{bB`}b}{{BhAj}Bf};:1{{}{{Df{l}}}}{bBb}{Bh{{Cb{{Bn{d}}}}}}{A`{{Cb{d}}}}{Afj}{Bhj}{Abj}210{ce{}{}}0000`{c{{Dh{e}}}{}{}}0000000000000000000{cDj{}}000000000`{bB`}`33{{DlDn}j}{DlBf}{cc{}}{{}Bf}7{{DlE`}Bf}{{}Dl}{{DlEb}Bf}1998```````````````````````````{{CdDd}Cd}00;;;;;;{Cd{{Bn{d}}}}{CdCd}{DdDd}{DbDb}{{ce}Bf{}{}}00{DdEd}{Dd{{Bn{d}}}}{CdBl}{{DbDb}j}{{CdCd}j}{{DdDd}j}{CdDb}{{CdEf}Eh}{{DbEf}Eh}0{cc{}}{CdAn}1{bDd}{{Ed{Bn{d}}}Dd}3{{{f{d}}}Cd}{dDb}{Cdj}{ce{}{}}00{Dbj}220000`{{}Cd}{{}Dd}{CdBb}00{{Cd{f{d}}}j}{{Dd{f{d}}}j}{Cd{{Bn{Dd}}}}00{{CdBb}Dd}00{CdBl}{{DdEd}Dd}{{Dd{Bn{d}}}Dd}{{CdBl}Cd}{{CdDb}Cd}{{CdAn}Cd}2{{CdEj}Cd}{DdBb}{CdEj}{ce{}{}}00{cBd{}}0{Dbd}{c{{Dh{e}}}{}{}}00000{cDj{}}00`````{{ElAh}j}{{EnAh}j}6666{ElBf}{cc{}}0{{ElCf}j}99{Elj}{{F`Cd}Bf}{{}El}{{}En}{{ElCd}j}{{EnCd}j}{EnBb}{En{{Bn{Ah}}}}{{ElAnCd}j}8{Enj}90{c{{Dh{e}}}{}{}}000{cDj{}}0``{ce{}{}}000{Fb{{f{d}}}}??{{Bl{f{d}}}Bf}22{AlFb}{{{f{d}}}Bl}666655","c":[],"p":[[5,"Property",0],[1,"u8"],[1,"slice"],[5,"PropertyEnum",0],[1,"bool"],[5,"StandardDatabase",0],[5,"Manufacture",0],[5,"Object",0],[5,"Node",0],[5,"RemoteNode",0],[5,"Controller",0],[8,"ObserverObject",392],[8,"RequestHandlerObject",0],[8,"ObjectCode",0],[6,"SocketAddr",448],[6,"PropertyRule",0],[1,"usize"],[5,"String",449],[1,"unit"],[5,"Device",0],[8,"ManufactureCode",0],[1,"u32"],[5,"Vec",450],[5,"Values",451],[6,"Option",452],[5,"Message",281],[6,"IpAddr",453],[10,"Hasher",454],[5,"Mutex",455],[5,"Arc",456],[5,"Receiver",457],[10,"RequestHandler",0],[6,"ESV",281],[5,"Property",281],[5,"Lazy",458],[6,"Result",459],[5,"TypeId",460],[5,"Logger",266],[5,"Metadata",461],[5,"Record",461],[6,"LevelFilter",461],[8,"PropertyCode",281],[5,"Formatter",462],[8,"Result",462],[8,"TID",281],[5,"Manager",392],[5,"NotifytManager",392],[10,"Observer",392],[5,"OID",428],[8,"Result",281],[5,"Bytes",428]],"b":[[332,"impl-Debug-for-ESV"],[333,"impl-Display-for-ESV"],[337,"impl-From%3C%26Property%3E-for-Property"],[338,"impl-Property"]]}],\ +["uechobench",{"doc":"","t":"HH","n":["main","usages"],"q":[[0,"uechobench"],[2,"std::io::error"],[3,"core::result"]],"d":["",""],"i":[0,0],"f":"{{}{{f{bd}}}}{{}b}","c":[],"p":[[1,"unit"],[5,"Error",2],[6,"Result",3]],"b":[]}],\ +["uechopost",{"doc":"","t":"HH","n":["main","usages"],"q":[[0,"uechopost"]],"d":["",""],"i":[0,0],"f":"{{}b}0","c":[],"p":[[1,"unit"]],"b":[]}],\ +["uechosearch",{"doc":"","t":"HH","n":["main","usages"],"q":[[0,"uechosearch"],[2,"std::io::error"],[3,"core::result"]],"d":["",""],"i":[0,0],"f":"{{}{{f{bd}}}}{{}b}","c":[],"p":[[1,"unit"],[5,"Error",2],[6,"Result",3]],"b":[]}]\ +]')); +if (typeof exports !== 'undefined') exports.searchIndex = searchIndex; +else if (window.initSearch) window.initSearch(searchIndex); diff --git a/settings.html b/settings.html index 37256b38..394482f9 100644 --- a/settings.html +++ b/settings.html @@ -1 +1,2 @@ -Rustdoc settings

Rustdoc settings

Back
\ No newline at end of file +Settings +

Rustdoc settings

Back
\ No newline at end of file diff --git a/source-files.js b/source-files.js deleted file mode 100644 index 14275974..00000000 --- a/source-files.js +++ /dev/null @@ -1,4 +0,0 @@ -var sourcesIndex = JSON.parse('{\ -"echonet":["",[["log",[],["logger.rs","mod.rs"]],["protocol",[],["error.rs","esv.rs","esv_test.rs","message.rs","message_handler.rs","message_test.rs","mod.rs","property.rs","property_test.rs","result.rs"]],["transport",[],["default.rs","error.rs","interface.rs","interface_unix.rs","interface_unix_test.rs","manager.rs","manager_test.rs","mod.rs","multicast_manager.rs","multicast_manager_test.rs","multicast_server.rs","multicast_server_test.rs","notifier.rs","notify_manager.rs","notify_manager_test.rs","observer.rs","result.rs","udp_socket.rs","unicast_manager.rs","unicast_manager_test.rs","unicast_server.rs","unicast_server_test.rs"]],["util",[],["bytes.rs","bytes_test.rs","mod.rs","oid.rs","oid_test.rs"]]],["class.rs","controller.rs","controller_node.rs","controller_test.rs","database.rs","database_manufacturers.rs","database_mra_objects.rs","database_test.rs","device.rs","device_node.rs","device_test.rs","error.rs","lib.rs","manufacture.rs","message.rs","message_test.rs","node.rs","node_profile.rs","node_profile_test.rs","node_test.rs","object.rs","object_test.rs","profile.rs","profile_test.rs","property.rs","property_test.rs","remote_node.rs","remote_node_test.rs","request_handler.rs","super_object.rs","version.rs"]]\ -}'); -createSourceSidebar(); diff --git a/src-files.js b/src-files.js new file mode 100644 index 00000000..67358641 --- /dev/null +++ b/src-files.js @@ -0,0 +1,7 @@ +var srcIndex = new Map(JSON.parse('[\ +["echonet",["",[["log",[],["logger.rs","mod.rs"]],["protocol",[],["error.rs","esv.rs","esv_test.rs","message.rs","message_handler.rs","message_test.rs","mod.rs","property.rs","property_test.rs","result.rs"]],["transport",[],["default.rs","error.rs","interface.rs","interface_unix.rs","interface_unix_test.rs","manager.rs","manager_test.rs","mod.rs","multicast_manager.rs","multicast_manager_test.rs","multicast_server.rs","multicast_server_test.rs","notifier.rs","notify_manager.rs","notify_manager_test.rs","observer.rs","result.rs","udp_socket.rs","unicast_manager.rs","unicast_manager_test.rs","unicast_server.rs","unicast_server_test.rs"]],["util",[],["bytes.rs","bytes_test.rs","mod.rs","oid.rs","oid_test.rs"]]],["class.rs","controller.rs","controller_node.rs","controller_test.rs","database.rs","database_manufacturers.rs","database_mra_objects.rs","database_test.rs","device.rs","device_node.rs","device_test.rs","error.rs","lib.rs","manufacture.rs","message.rs","message_test.rs","node.rs","node_profile.rs","node_profile_test.rs","node_test.rs","object.rs","object_test.rs","profile.rs","profile_test.rs","property.rs","property_test.rs","remote_node.rs","remote_node_test.rs","request_handler.rs","super_object.rs","version.rs"]]],\ +["uechobench",["",[],["uechobench.rs"]]],\ +["uechopost",["",[],["uechopost.rs"]]],\ +["uechosearch",["",[],["uechosearch.rs"]]]\ +]')); +createSrcSidebar(); diff --git a/src/echonet/class.rs.html b/src/echonet/class.rs.html index d12f3917..dda2f2da 100644 --- a/src/echonet/class.rs.html +++ b/src/echonet/class.rs.html @@ -1,4 +1,6 @@ -class.rs - source
1
+class.rs - source
+    
1
 2
 3
 4
@@ -13,14 +15,14 @@
 13
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/controller.rs.html b/src/echonet/controller.rs.html
index 430b993e..1f8633a2 100644
--- a/src/echonet/controller.rs.html
+++ b/src/echonet/controller.rs.html
@@ -1,4 +1,6 @@
-controller.rs - source
1
+controller.rs - source
+    
1
 2
 3
 4
@@ -149,14 +151,14 @@
 149
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
@@ -186,14 +188,14 @@
 /// ctrl.search();
 /// thread::sleep(time::Duration::from_secs(2));
 /// for (i, node) in ctrl.nodes().iter().enumerate() {
-///     println!("[{}] {}", i, node.addr());
+///     println!("[{}] {}", i, node.addr());
 ///     for (j, obj) in node.objects().iter().enumerate() {
-///         println!("[{}] {:06X}", j, obj.code());
+///         println!("[{}] {:06X}", j, obj.code());
 ///         for obj_prop in obj.properties() {
 ///             if !obj_prop.is_read_required() {
 ///                 continue;
 ///             }
-///             print!("[{:02X}] {}:", obj_prop.code(), obj_prop.name());
+///             print!("[{:02X}] {}:", obj_prop.code(), obj_prop.name());
 ///             let mut msg = Message::new();
 ///             msg.set_esv(ESV::ReadRequest);
 ///             msg.set_deoj(obj.code());
@@ -203,11 +205,11 @@
 ///             match rx.recv_timeout(time::Duration::from_secs(1)) {
 ///                 Ok(msg) => {
 ///                     if 0 < msg.opc() {
-///                       println!("{}", hex::encode(msg.property(0).data()));
+///                       println!("{}", hex::encode(msg.property(0).data()));
 ///                     }
 ///                 }
 ///                 Err(_e) => {
-///                     println!("{}",  "<timeout>");
+///                     println!("{}",  "<timeout>");
 ///                 }
 ///             };
 ///         }
diff --git a/src/echonet/controller_node.rs.html b/src/echonet/controller_node.rs.html
index 22798d1a..9b2000c7 100644
--- a/src/echonet/controller_node.rs.html
+++ b/src/echonet/controller_node.rs.html
@@ -1,4 +1,6 @@
-controller_node.rs - source
1
+controller_node.rs - source
+    
1
 2
 3
 4
@@ -146,14 +148,14 @@
 146
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
@@ -281,7 +283,7 @@
         }
 
         let mut remote_node = RemoteNode::from_message(msg);
-        info!("FOUND: {}", remote_node.addr());
+        info!("FOUND: {}", remote_node.addr());
         for (_, obj) in remote_node.objects_mut().iter_mut().enumerate() {
             obj.add_standard_properties(SUPER_OBJECT_CODE);
             obj.add_standard_properties(obj.code());
diff --git a/src/echonet/controller_test.rs.html b/src/echonet/controller_test.rs.html
index 5f591a89..ec421ae8 100644
--- a/src/echonet/controller_test.rs.html
+++ b/src/echonet/controller_test.rs.html
@@ -1,4 +1,6 @@
-controller_test.rs - source
1
+controller_test.rs - source
+    
1
 2
 3
 4
@@ -30,14 +32,14 @@
 30
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/database.rs.html b/src/echonet/database.rs.html
index 1b04588b..a49ae437 100644
--- a/src/echonet/database.rs.html
+++ b/src/echonet/database.rs.html
@@ -1,4 +1,6 @@
-database.rs - source
1
+database.rs - source
+    
1
 2
 3
 4
@@ -99,14 +101,14 @@
 99
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
@@ -114,16 +116,16 @@
 use crate::manufacture::*;
 use crate::object::*;
 
-#[cfg(feature = "once_cell")]
+#[cfg(feature = "once_cell")]
 use once_cell::sync::Lazy;
 
-#[cfg(not(feature = "once_cell"))]
+#[cfg(not(feature = "once_cell"))]
 use std::sync::LazyLock;
 
-#[cfg(feature = "once_cell")]
+#[cfg(feature = "once_cell")]
 static SHARED_STANDARD_DATABASE: Lazy<StandardDatabase> = Lazy::new(|| StandardDatabase::new());
 
-#[cfg(not(feature = "once_cell"))]
+#[cfg(not(feature = "once_cell"))]
 static SHARED_STANDARD_DATABASE: LazyLock<StandardDatabase> =
     LazyLock::new(|| StandardDatabase::new());
 
@@ -157,13 +159,13 @@
         db
     }
 
-    #[cfg(feature = "once_cell")]
-    pub fn shared() -> &'static Lazy<StandardDatabase> {
+    #[cfg(feature = "once_cell")]
+    pub fn shared() -> &'static Lazy<StandardDatabase> {
         &SHARED_STANDARD_DATABASE
     }
 
-    #[cfg(not(feature = "once_cell"))]
-    pub fn shared() -> &'static LazyLock<StandardDatabase> {
+    #[cfg(not(feature = "once_cell"))]
+    pub fn shared() -> &'static LazyLock<StandardDatabase> {
         &SHARED_STANDARD_DATABASE
     }
 
diff --git a/src/echonet/database_manufacturers.rs.html b/src/echonet/database_manufacturers.rs.html
index 6a43e600..25885dff 100644
--- a/src/echonet/database_manufacturers.rs.html
+++ b/src/echonet/database_manufacturers.rs.html
@@ -1,4 +1,6 @@
-database_manufacturers.rs - source
1
+database_manufacturers.rs - source
+    
1
 2
 3
 4
@@ -349,14 +351,14 @@
 349
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
@@ -373,327 +375,327 @@
     }
 
     pub fn init_manufactures(&mut self) {
-        self.add_standard_manufacture(0x00002F, String::from("AIPHONE CO., LTD."));
-        self.add_standard_manufacture(0x00011A, String::from("ACCESS CO.,LTD."));
-        self.add_standard_manufacture(0x00002C, String::from("AFT CO.,LTD"));
-        self.add_standard_manufacture(0x000068, String::from("AISIN CORPORATION"));
-        self.add_standard_manufacture(0x000079, String::from("Anritsu Engineering Co.,Ltd,"));
-        self.add_standard_manufacture(0x00007F, String::from("ANRITSU CUSTOMER SUPPORT CO., LTD."));
-        self.add_standard_manufacture(0x000110, String::from("ASUKA SOLUTION COMPANY LIMITED"));
-        self.add_standard_manufacture(0x000096, String::from("Azbil Corporation"));
-        self.add_standard_manufacture(0x0000FD, String::from("Bellnix Co.,LTD"));
-        self.add_standard_manufacture(0x00006F, String::from("BUFFALO INC."));
-        self.add_standard_manufacture(0x0000B6, String::from("Bunka Shutter Co., Ltd"));
-        self.add_standard_manufacture(0x0000D2, String::from("CHOFUKOSAN.Co.Ltd"));
-        self.add_standard_manufacture(0x000088, String::from("CHOFU SEISAKUSHO CO.,LTD."));
-        self.add_standard_manufacture(0x0000D5, String::from("Choshu Industry Co., Ltd."));
-        self.add_standard_manufacture(0x0000A3, String::from("Chubu Electric Power Grid Co.,Inc."));
-        self.add_standard_manufacture(0x0000FB, String::from("CICO CORPORATION"));
-        self.add_standard_manufacture(0x0000F8, String::from("CIMX INITIATIVE INC."));
-        self.add_standard_manufacture(0x000123, String::from("Contec Co., Ltd."));
-        self.add_standard_manufacture(0x000130, String::from("COOLDESIGN Corporation"));
-        self.add_standard_manufacture(0x000067, String::from("CORONA CORPORATION"));
-        self.add_standard_manufacture(0x00009C, String::from("Diamond Electric Mfg.Co.,Ltd."));
+        self.add_standard_manufacture(0x00002F, String::from("AIPHONE CO., LTD."));
+        self.add_standard_manufacture(0x00011A, String::from("ACCESS CO.,LTD."));
+        self.add_standard_manufacture(0x00002C, String::from("AFT CO.,LTD"));
+        self.add_standard_manufacture(0x000068, String::from("AISIN CORPORATION"));
+        self.add_standard_manufacture(0x000079, String::from("Anritsu Engineering Co.,Ltd,"));
+        self.add_standard_manufacture(0x00007F, String::from("ANRITSU CUSTOMER SUPPORT CO., LTD."));
+        self.add_standard_manufacture(0x000110, String::from("ASUKA SOLUTION COMPANY LIMITED"));
+        self.add_standard_manufacture(0x000096, String::from("Azbil Corporation"));
+        self.add_standard_manufacture(0x0000FD, String::from("Bellnix Co.,LTD"));
+        self.add_standard_manufacture(0x00006F, String::from("BUFFALO INC."));
+        self.add_standard_manufacture(0x0000B6, String::from("Bunka Shutter Co., Ltd"));
+        self.add_standard_manufacture(0x0000D2, String::from("CHOFUKOSAN.Co.Ltd"));
+        self.add_standard_manufacture(0x000088, String::from("CHOFU SEISAKUSHO CO.,LTD."));
+        self.add_standard_manufacture(0x0000D5, String::from("Choshu Industry Co., Ltd."));
+        self.add_standard_manufacture(0x0000A3, String::from("Chubu Electric Power Grid Co.,Inc."));
+        self.add_standard_manufacture(0x0000FB, String::from("CICO CORPORATION"));
+        self.add_standard_manufacture(0x0000F8, String::from("CIMX INITIATIVE INC."));
+        self.add_standard_manufacture(0x000123, String::from("Contec Co., Ltd."));
+        self.add_standard_manufacture(0x000130, String::from("COOLDESIGN Corporation"));
+        self.add_standard_manufacture(0x000067, String::from("CORONA CORPORATION"));
+        self.add_standard_manufacture(0x00009C, String::from("Diamond Electric Mfg.Co.,Ltd."));
         self.add_standard_manufacture(
             0x000080,
-            String::from("DIAMOND&ZEBRA ELECTRIC MFG.CO.,LTD."),
+            String::from("DIAMOND&ZEBRA ELECTRIC MFG.CO.,LTD."),
         );
-        self.add_standard_manufacture(0x000119, String::from("DAIHEN Corporation"));
-        self.add_standard_manufacture(0x000008, String::from("DAIKIN INDUSTRIES,LTD."));
+        self.add_standard_manufacture(0x000119, String::from("DAIHEN Corporation"));
+        self.add_standard_manufacture(0x000008, String::from("DAIKIN INDUSTRIES,LTD."));
         self.add_standard_manufacture(
             0x000015,
-            String::from("Daikin Systems&Solutions Laboratory Ltd."),
-        );
-        self.add_standard_manufacture(0x00004F, String::from("Daiwa House Industry co.,Ltd"));
-        self.add_standard_manufacture(0x000103, String::from("Data Technology Inc."));
-        self.add_standard_manufacture(0x0000E3, String::from("DDL Co.,Ltd"));
-        self.add_standard_manufacture(0x0000AD, String::from("Delta Electronics (Japan), Inc."));
-        self.add_standard_manufacture(0x0000BE, String::from("DENKEN Co.,Ltd."));
-        self.add_standard_manufacture(0x0000F4, String::from("DENSO AIRCOOL CORPORATION"));
-        self.add_standard_manufacture(0x00003C, String::from("DENSO Corporation"));
-        self.add_standard_manufacture(0x000109, String::from("DENSO Co.,LTD."));
-        self.add_standard_manufacture(0x00012B, String::from("DENSO WAVE INCORPORATED"));
-        self.add_standard_manufacture(0x000113, String::from("EBARA JITSUGYO POWER CO., LTD."));
-        self.add_standard_manufacture(0x000057, String::from("ELIIYPower Co.,ltd"));
-        self.add_standard_manufacture(0x00012E, String::from("Eneres Co.,Ltd."));
-        self.add_standard_manufacture(0x000041, String::from("ENEGATE CO.,LTD."));
-        self.add_standard_manufacture(0x00010A, String::from("ENERGY GAP CORPORATION"));
-        self.add_standard_manufacture(0x0000F3, String::from("Energy Gateway, Inc"));
-        self.add_standard_manufacture(0x0000F2, String::from("Energy Solutions Inc."));
-        self.add_standard_manufacture(0x000072, String::from("Eneres Co.,Ltd."));
-        self.add_standard_manufacture(0x0000DD, String::from("EneStone Corporation"));
-        self.add_standard_manufacture(0x000132, String::from("EX4Energy, Inc."));
-        self.add_standard_manufacture(0x000055, String::from("FAMILYNET JAPAN CORPORATION"));
-        self.add_standard_manufacture(0x0000F6, String::from("Field Logic Inc."));
-        self.add_standard_manufacture(0x00012F, String::from("FORMOSA BIO AND ENERGY CORP JAPAN"));
-        self.add_standard_manufacture(0x0000CB, String::from("Fuji Electric Co.,Ltd"));
-        self.add_standard_manufacture(0x0000FC, String::from("FUJI INDUSTRIAL CO.,Ltd."));
-        self.add_standard_manufacture(0x000051, String::from("Fuji IT Co.,Ltd."));
-        self.add_standard_manufacture(0x00008A, String::from("FUJITSU GENERAL LIMITED"));
-        self.add_standard_manufacture(0x00004E, String::from("FUJITSU LIMITED"));
-        self.add_standard_manufacture(0x000090, String::from("Fujitsu Component Limited"));
+            String::from("Daikin Systems&Solutions Laboratory Ltd."),
+        );
+        self.add_standard_manufacture(0x00004F, String::from("Daiwa House Industry co.,Ltd"));
+        self.add_standard_manufacture(0x000103, String::from("Data Technology Inc."));
+        self.add_standard_manufacture(0x0000E3, String::from("DDL Co.,Ltd"));
+        self.add_standard_manufacture(0x0000AD, String::from("Delta Electronics (Japan), Inc."));
+        self.add_standard_manufacture(0x0000BE, String::from("DENKEN Co.,Ltd."));
+        self.add_standard_manufacture(0x0000F4, String::from("DENSO AIRCOOL CORPORATION"));
+        self.add_standard_manufacture(0x00003C, String::from("DENSO Corporation"));
+        self.add_standard_manufacture(0x000109, String::from("DENSO Co.,LTD."));
+        self.add_standard_manufacture(0x00012B, String::from("DENSO WAVE INCORPORATED"));
+        self.add_standard_manufacture(0x000113, String::from("EBARA JITSUGYO POWER CO., LTD."));
+        self.add_standard_manufacture(0x000057, String::from("ELIIYPower Co.,ltd"));
+        self.add_standard_manufacture(0x00012E, String::from("Eneres Co.,Ltd."));
+        self.add_standard_manufacture(0x000041, String::from("ENEGATE CO.,LTD."));
+        self.add_standard_manufacture(0x00010A, String::from("ENERGY GAP CORPORATION"));
+        self.add_standard_manufacture(0x0000F3, String::from("Energy Gateway, Inc"));
+        self.add_standard_manufacture(0x0000F2, String::from("Energy Solutions Inc."));
+        self.add_standard_manufacture(0x000072, String::from("Eneres Co.,Ltd."));
+        self.add_standard_manufacture(0x0000DD, String::from("EneStone Corporation"));
+        self.add_standard_manufacture(0x000132, String::from("EX4Energy, Inc."));
+        self.add_standard_manufacture(0x000055, String::from("FAMILYNET JAPAN CORPORATION"));
+        self.add_standard_manufacture(0x0000F6, String::from("Field Logic Inc."));
+        self.add_standard_manufacture(0x00012F, String::from("FORMOSA BIO AND ENERGY CORP JAPAN"));
+        self.add_standard_manufacture(0x0000CB, String::from("Fuji Electric Co.,Ltd"));
+        self.add_standard_manufacture(0x0000FC, String::from("FUJI INDUSTRIAL CO.,Ltd."));
+        self.add_standard_manufacture(0x000051, String::from("Fuji IT Co.,Ltd."));
+        self.add_standard_manufacture(0x00008A, String::from("FUJITSU GENERAL LIMITED"));
+        self.add_standard_manufacture(0x00004E, String::from("FUJITSU LIMITED"));
+        self.add_standard_manufacture(0x000090, String::from("Fujitsu Component Limited"));
         self.add_standard_manufacture(
             0x0000DE,
-            String::from("FUJIFILM Business Innovation Japan Corp"),
+            String::from("FUJIFILM Business Innovation Japan Corp"),
         );
         self.add_standard_manufacture(
             0x000097,
-            String::from("Future Technology Laboratories, Inc."),
+            String::from("Future Technology Laboratories, Inc."),
         );
-        self.add_standard_manufacture(0x00009B, String::from("GASTAR Co.,Ltd"));
-        self.add_standard_manufacture(0x00008F, String::from("Glamo Inc."));
-        self.add_standard_manufacture(0x000129, String::from("GoodWe Japan K.K"));
-        self.add_standard_manufacture(0x00009F, String::from("GS Yuasa International Ltd"));
-        self.add_standard_manufacture(0x000122, String::from("Hanwha Q CELLS Japan CO.,LTD."));
-        self.add_standard_manufacture(0x000001, String::from("Hitachi, Ltd."));
+        self.add_standard_manufacture(0x00009B, String::from("GASTAR Co.,Ltd"));
+        self.add_standard_manufacture(0x00008F, String::from("Glamo Inc."));
+        self.add_standard_manufacture(0x000129, String::from("GoodWe Japan K.K"));
+        self.add_standard_manufacture(0x00009F, String::from("GS Yuasa International Ltd"));
+        self.add_standard_manufacture(0x000122, String::from("Hanwha Q CELLS Japan CO.,LTD."));
+        self.add_standard_manufacture(0x000001, String::from("Hitachi, Ltd."));
         self.add_standard_manufacture(
             0x000022,
-            String::from("Hitachi Global Life Solutions, Inc."),
+            String::from("Hitachi Global Life Solutions, Inc."),
         );
         self.add_standard_manufacture(
             0x000040,
-            String::from("Hitachi High-Tech Solutions Corporation"),
+            String::from("Hitachi High-Tech Solutions Corporation"),
         );
         self.add_standard_manufacture(
             0x000044,
-            String::from("Hitachi Industrial Equipment Systems Co.,Ltd."),
+            String::from("Hitachi Industrial Equipment Systems Co.,Ltd."),
         );
         self.add_standard_manufacture(
             0x0000CC,
-            String::from("Hitachi-Johnson Controls Air Conditioning,Inc."),
+            String::from("Hitachi-Johnson Controls Air Conditioning,Inc."),
         );
-        self.add_standard_manufacture(0x0000E5, String::from("Hitachi Power Solutions Co.,Ltd."));
+        self.add_standard_manufacture(0x0000E5, String::from("Hitachi Power Solutions Co.,Ltd."));
         self.add_standard_manufacture(
             0x0000E6,
-            String::from("Hokkaido Electrical Safety Services Foundation"),
+            String::from("Hokkaido Electrical Safety Services Foundation"),
         );
-        self.add_standard_manufacture(0x0000B8, String::from("Hokkaido Electric Power Co.,Inc."));
+        self.add_standard_manufacture(0x0000B8, String::from("Hokkaido Electric Power Co.,Inc."));
         self.add_standard_manufacture(
             0x0000BB,
-            String::from("Hokuriku Electric Power Transmission & Distribution Company"),
-        );
-        self.add_standard_manufacture(0x0000A1, String::from("Honda R&D Co., Ltd."));
-        self.add_standard_manufacture(0x000115, String::from("HUAWEI TECHNOLOGIES JAPAN K.K."));
-        self.add_standard_manufacture(0x0000AC, String::from("IDEC COROPRATION"));
-        self.add_standard_manufacture(0x00004D, String::from("INABA DENKI SANGYO CO.,LTD."));
-        self.add_standard_manufacture(0x000056, String::from("iND Co.,Ltd"));
-        self.add_standard_manufacture(0x0000ED, String::from("INFINI Co. LTD"));
-        self.add_standard_manufacture(0x000124, String::from("INTEC Inc."));
-        self.add_standard_manufacture(0x0000B1, String::from("Internet Initiative Japan Inc."));
-        self.add_standard_manufacture(0x000087, String::from("I-O DATA DEVICE,INC."));
-        self.add_standard_manufacture(0x00006B, String::from("ISB Corporation"));
-        self.add_standard_manufacture(0x00010F, String::from("Iwatani Corporation"));
-        self.add_standard_manufacture(0x000081, String::from("IWATSU ELECTRIC CO., LTD."));
+            String::from("Hokuriku Electric Power Transmission & Distribution Company"),
+        );
+        self.add_standard_manufacture(0x0000A1, String::from("Honda R&D Co., Ltd."));
+        self.add_standard_manufacture(0x000115, String::from("HUAWEI TECHNOLOGIES JAPAN K.K."));
+        self.add_standard_manufacture(0x0000AC, String::from("IDEC COROPRATION"));
+        self.add_standard_manufacture(0x00004D, String::from("INABA DENKI SANGYO CO.,LTD."));
+        self.add_standard_manufacture(0x000056, String::from("iND Co.,Ltd"));
+        self.add_standard_manufacture(0x0000ED, String::from("INFINI Co. LTD"));
+        self.add_standard_manufacture(0x000124, String::from("INTEC Inc."));
+        self.add_standard_manufacture(0x0000B1, String::from("Internet Initiative Japan Inc."));
+        self.add_standard_manufacture(0x000087, String::from("I-O DATA DEVICE,INC."));
+        self.add_standard_manufacture(0x00006B, String::from("ISB Corporation"));
+        self.add_standard_manufacture(0x00010F, String::from("Iwatani Corporation"));
+        self.add_standard_manufacture(0x000081, String::from("IWATSU ELECTRIC CO., LTD."));
         self.add_standard_manufacture(
             0x0000C3,
-            String::from("Japan Electric Meters Inspection Corporation"),
-        );
-        self.add_standard_manufacture(0x0000F7, String::from("JCity,Inc."));
-        self.add_standard_manufacture(0x0000CA, String::from("JSP CO.,LTD."));
-        self.add_standard_manufacture(0x0000D7, String::from("Kaga Electronics co.,ltd."));
-        self.add_standard_manufacture(0x000077, String::from("Kanagawa Institute of Technology"));
-        self.add_standard_manufacture(0x000063, String::from("Kawamura Electric Inc."));
-        self.add_standard_manufacture(0x0000F0, String::from("KANEKA CORPORATION"));
-        self.add_standard_manufacture(0x00010B, String::from("KITANIHON ELECTRIC CABLE CO.,LTD."));
-        self.add_standard_manufacture(0x0000E8, String::from("KOIZUMI LIGHTING TECHNOLOGY CORP."));
-        self.add_standard_manufacture(0x00003B, String::from("KYOCERA Corporation"));
-        self.add_standard_manufacture(0x00008C, String::from("Kyuden Technosystems Corporation"));
+            String::from("Japan Electric Meters Inspection Corporation"),
+        );
+        self.add_standard_manufacture(0x0000F7, String::from("JCity,Inc."));
+        self.add_standard_manufacture(0x0000CA, String::from("JSP CO.,LTD."));
+        self.add_standard_manufacture(0x0000D7, String::from("Kaga Electronics co.,ltd."));
+        self.add_standard_manufacture(0x000077, String::from("Kanagawa Institute of Technology"));
+        self.add_standard_manufacture(0x000063, String::from("Kawamura Electric Inc."));
+        self.add_standard_manufacture(0x0000F0, String::from("KANEKA CORPORATION"));
+        self.add_standard_manufacture(0x00010B, String::from("KITANIHON ELECTRIC CABLE CO.,LTD."));
+        self.add_standard_manufacture(0x0000E8, String::from("KOIZUMI LIGHTING TECHNOLOGY CORP."));
+        self.add_standard_manufacture(0x00003B, String::from("KYOCERA Corporation"));
+        self.add_standard_manufacture(0x00008C, String::from("Kyuden Technosystems Corporation"));
         self.add_standard_manufacture(
             0x0000BF,
-            String::from("KYUSHU ELECTRIC POWER TRANSMISSION AND DISTRIBUTION CO.,INC."),
-        );
-        self.add_standard_manufacture(0x0000F1, String::from("Laplace Systems Co., Ltd."));
-        self.add_standard_manufacture(0x000125, String::from("LiveSmart KK"));
-        self.add_standard_manufacture(0x000025, String::from("LIXIL Corporation"));
-        self.add_standard_manufacture(0x0000E0, String::from("Looop Inc"));
-        self.add_standard_manufacture(0x00010C, String::from("MAX CO., LTD."));
-        self.add_standard_manufacture(0x000078, String::from("Maxell, Ltd."));
-        self.add_standard_manufacture(0x000058, String::from("Mediotec Corporation"));
-        self.add_standard_manufacture(0x000120, String::from("Meisei electric co.,ltd."));
-        self.add_standard_manufacture(0x000083, String::from("Melco Techno Yokohama Corporation"));
-        self.add_standard_manufacture(0x000006, String::from("Mitsubishi Electric Corp."));
+            String::from("KYUSHU ELECTRIC POWER TRANSMISSION AND DISTRIBUTION CO.,INC."),
+        );
+        self.add_standard_manufacture(0x0000F1, String::from("Laplace Systems Co., Ltd."));
+        self.add_standard_manufacture(0x000125, String::from("LiveSmart KK"));
+        self.add_standard_manufacture(0x000025, String::from("LIXIL Corporation"));
+        self.add_standard_manufacture(0x0000E0, String::from("Looop Inc"));
+        self.add_standard_manufacture(0x00010C, String::from("MAX CO., LTD."));
+        self.add_standard_manufacture(0x000078, String::from("Maxell, Ltd."));
+        self.add_standard_manufacture(0x000058, String::from("Mediotec Corporation"));
+        self.add_standard_manufacture(0x000120, String::from("Meisei electric co.,ltd."));
+        self.add_standard_manufacture(0x000083, String::from("Melco Techno Yokohama Corporation"));
+        self.add_standard_manufacture(0x000006, String::from("Mitsubishi Electric Corp."));
         self.add_standard_manufacture(
             0x000034,
-            String::from("MITSUBISHI ELECTRIC ENGINEERING COMPANY LIMITED"),
+            String::from("MITSUBISHI ELECTRIC ENGINEERING COMPANY LIMITED"),
         );
         self.add_standard_manufacture(
             0x000105,
-            String::from("Mitsubishi Electric Lighting Corporation"),
-        );
-        self.add_standard_manufacture(0x00012A, String::from("Monochrome Inc."));
-        self.add_standard_manufacture(0x00011D, String::from("mui Lab, Inc."));
-        self.add_standard_manufacture(0x0000D4, String::from("Murata Manufacturing Co.,Ltd."));
-        self.add_standard_manufacture(0x0000B0, String::from("NALTEC, Inc."));
-        self.add_standard_manufacture(0x000106, String::from("Nature Inc."));
-        self.add_standard_manufacture(0x000009, String::from("NEC Corp."));
-        self.add_standard_manufacture(0x000118, String::from("NEC Magnus Communications, Ltd"));
-        self.add_standard_manufacture(0x000073, String::from("NEC Platforms, Ltd."));
-        self.add_standard_manufacture(0x000091, String::from("NEC Platforms, Ltd."));
-        self.add_standard_manufacture(0x0000E2, String::from("NextDrive Inc."));
-        self.add_standard_manufacture(0x000104, String::from("Next Energy & Resources Co., Ltd."));
-        self.add_standard_manufacture(0x0000B2, String::from("NF Blossom Technologies, Inc."));
-        self.add_standard_manufacture(0x0000A5, String::from("Nichibei Co., Ltd."));
-        self.add_standard_manufacture(0x00006C, String::from("NICHICON CORPORATION"));
-        self.add_standard_manufacture(0x0000EB, String::from("NICHICON (KAMEOKA) CORPORATION"));
-        self.add_standard_manufacture(0x000102, String::from("NICHICON (KUSATSU) CORPORATION"));
-        self.add_standard_manufacture(0x000112, String::from("NICHIEI INTEC CO., LTD"));
-        self.add_standard_manufacture(0x000071, String::from("NIHON SANGYO CO.,LTD."));
-        self.add_standard_manufacture(0x0000DC, String::from("NIHON TECHNO CO.,LTD."));
+            String::from("Mitsubishi Electric Lighting Corporation"),
+        );
+        self.add_standard_manufacture(0x00012A, String::from("Monochrome Inc."));
+        self.add_standard_manufacture(0x00011D, String::from("mui Lab, Inc."));
+        self.add_standard_manufacture(0x0000D4, String::from("Murata Manufacturing Co.,Ltd."));
+        self.add_standard_manufacture(0x0000B0, String::from("NALTEC, Inc."));
+        self.add_standard_manufacture(0x000106, String::from("Nature Inc."));
+        self.add_standard_manufacture(0x000009, String::from("NEC Corp."));
+        self.add_standard_manufacture(0x000118, String::from("NEC Magnus Communications, Ltd"));
+        self.add_standard_manufacture(0x000073, String::from("NEC Platforms, Ltd."));
+        self.add_standard_manufacture(0x000091, String::from("NEC Platforms, Ltd."));
+        self.add_standard_manufacture(0x0000E2, String::from("NextDrive Inc."));
+        self.add_standard_manufacture(0x000104, String::from("Next Energy & Resources Co., Ltd."));
+        self.add_standard_manufacture(0x0000B2, String::from("NF Blossom Technologies, Inc."));
+        self.add_standard_manufacture(0x0000A5, String::from("Nichibei Co., Ltd."));
+        self.add_standard_manufacture(0x00006C, String::from("NICHICON CORPORATION"));
+        self.add_standard_manufacture(0x0000EB, String::from("NICHICON (KAMEOKA) CORPORATION"));
+        self.add_standard_manufacture(0x000102, String::from("NICHICON (KUSATSU) CORPORATION"));
+        self.add_standard_manufacture(0x000112, String::from("NICHIEI INTEC CO., LTD"));
+        self.add_standard_manufacture(0x000071, String::from("NIHON SANGYO CO.,LTD."));
+        self.add_standard_manufacture(0x0000DC, String::from("NIHON TECHNO CO.,LTD."));
         self.add_standard_manufacture(
             0x00008D,
-            String::from("NIPPON TELEGRAPH AND TELEPHONE CORPORATION"),
+            String::from("NIPPON TELEGRAPH AND TELEPHONE CORPORATION"),
         );
         self.add_standard_manufacture(
             0x000047,
-            String::from("NIPPON TELEGRAPH AND TELEPHONE EAST CORPORATION"),
+            String::from("NIPPON TELEGRAPH AND TELEPHONE EAST CORPORATION"),
         );
         self.add_standard_manufacture(
             0x000086,
-            String::from("NIPPON TELEGRAPH AND TELEPHONE WEST CORPORATION"),
+            String::from("NIPPON TELEGRAPH AND TELEPHONE WEST CORPORATION"),
         );
-        self.add_standard_manufacture(0x000036, String::from("NISSIN SYSTEMS CO., LTD."));
-        self.add_standard_manufacture(0x0000B7, String::from("Nitto Kogyo Corporation"));
-        self.add_standard_manufacture(0x000054, String::from("NORITZ CORP."));
-        self.add_standard_manufacture(0x00007C, String::from("NSW Inc."));
+        self.add_standard_manufacture(0x000036, String::from("NISSIN SYSTEMS CO., LTD."));
+        self.add_standard_manufacture(0x0000B7, String::from("Nitto Kogyo Corporation"));
+        self.add_standard_manufacture(0x000054, String::from("NORITZ CORP."));
+        self.add_standard_manufacture(0x00007C, String::from("NSW Inc."));
         self.add_standard_manufacture(
             0x0000A0,
-            String::from("NTT Advanced Technology Corporation"),
-        );
-        self.add_standard_manufacture(0x000023, String::from("NTT COMWARE CORPORATION"));
-        self.add_standard_manufacture(0x000061, String::from("NTT DATA INTELLILINK CORPORATION"));
-        self.add_standard_manufacture(0x0000E9, String::from("NTT Smile Energy Inc."));
-        self.add_standard_manufacture(0x0000F5, String::from("ODELIC CO., LTD."));
-        self.add_standard_manufacture(0x000012, String::from("Oi Electric Co., Ltd"));
-        self.add_standard_manufacture(0x00006A, String::from("OKAYA & CO., LTD."));
-        self.add_standard_manufacture(0x000114, String::from("OkayaKiden Co.,Ltd."));
-        self.add_standard_manufacture(0x000048, String::from("Oki Electric Industry Co., Ltd."));
-        self.add_standard_manufacture(0x000064, String::from("OMRON SOCIAL SOLUTIONS CO.,LTD."));
-        self.add_standard_manufacture(0x00012C, String::from("Onamba Co., Ltd."));
-        self.add_standard_manufacture(0x0000D8, String::from("OSAKI DATATECH CO.,LTD."));
-        self.add_standard_manufacture(0x000052, String::from("OSAKI ELECTRIC CO.,LTD."));
-        self.add_standard_manufacture(0x000127, String::from("Paloma Co.,Ltd."));
-        self.add_standard_manufacture(0x00000B, String::from("Panasonic Holdings Corporation"));
+            String::from("NTT Advanced Technology Corporation"),
+        );
+        self.add_standard_manufacture(0x000023, String::from("NTT COMWARE CORPORATION"));
+        self.add_standard_manufacture(0x000061, String::from("NTT DATA INTELLILINK CORPORATION"));
+        self.add_standard_manufacture(0x0000E9, String::from("NTT Smile Energy Inc."));
+        self.add_standard_manufacture(0x0000F5, String::from("ODELIC CO., LTD."));
+        self.add_standard_manufacture(0x000012, String::from("Oi Electric Co., Ltd"));
+        self.add_standard_manufacture(0x00006A, String::from("OKAYA & CO., LTD."));
+        self.add_standard_manufacture(0x000114, String::from("OkayaKiden Co.,Ltd."));
+        self.add_standard_manufacture(0x000048, String::from("Oki Electric Industry Co., Ltd."));
+        self.add_standard_manufacture(0x000064, String::from("OMRON SOCIAL SOLUTIONS CO.,LTD."));
+        self.add_standard_manufacture(0x00012C, String::from("Onamba Co., Ltd."));
+        self.add_standard_manufacture(0x0000D8, String::from("OSAKI DATATECH CO.,LTD."));
+        self.add_standard_manufacture(0x000052, String::from("OSAKI ELECTRIC CO.,LTD."));
+        self.add_standard_manufacture(0x000127, String::from("Paloma Co.,Ltd."));
+        self.add_standard_manufacture(0x00000B, String::from("Panasonic Holdings Corporation"));
         self.add_standard_manufacture(
             0x0000DA,
-            String::from("Panasonic Commercial Equipment Systems Co.,Ltd."),
-        );
-        self.add_standard_manufacture(0x0000FE, String::from("Panasonic Ecology Systems Co.,Ltd."));
-        self.add_standard_manufacture(0x0000FA, String::from("Plat'Home Co."));
-        self.add_standard_manufacture(0x000082, String::from("PURPOSE CO.,LTD."));
-        self.add_standard_manufacture(0x000059, String::from("Rinnai Corporation"));
-        self.add_standard_manufacture(0x000128, String::from("SAIKOH ENGINEERING Co.,Ltd."));
-        self.add_standard_manufacture(0x00011E, String::from("SAKAIGAWA CO., LTD"));
-        self.add_standard_manufacture(0x00011C, String::from("SANDEN RETAIL SYSTEMS CORPORATION"));
-        self.add_standard_manufacture(0x00010E, String::from("SANIX INCORPORATED"));
-        self.add_standard_manufacture(0x0000BA, String::from("SankyoTateyama, Inc."));
-        self.add_standard_manufacture(0x0000C5, String::from("SANWA SHUTTER CORPORATION"));
-        self.add_standard_manufacture(0x000093, String::from("SATORI ELECTRIC CO.,LTD."));
-        self.add_standard_manufacture(0x000107, String::from("SEIKO ELECTRIC CO.,LTD."));
-        self.add_standard_manufacture(0x00003A, String::from("SEKISUI HOUSE, LTD."));
-        self.add_standard_manufacture(0x000005, String::from("Sharp Corp"));
+            String::from("Panasonic Commercial Equipment Systems Co.,Ltd."),
+        );
+        self.add_standard_manufacture(0x0000FE, String::from("Panasonic Ecology Systems Co.,Ltd."));
+        self.add_standard_manufacture(0x0000FA, String::from("Plat'Home Co."));
+        self.add_standard_manufacture(0x000082, String::from("PURPOSE CO.,LTD."));
+        self.add_standard_manufacture(0x000059, String::from("Rinnai Corporation"));
+        self.add_standard_manufacture(0x000128, String::from("SAIKOH ENGINEERING Co.,Ltd."));
+        self.add_standard_manufacture(0x00011E, String::from("SAKAIGAWA CO., LTD"));
+        self.add_standard_manufacture(0x00011C, String::from("SANDEN RETAIL SYSTEMS CORPORATION"));
+        self.add_standard_manufacture(0x00010E, String::from("SANIX INCORPORATED"));
+        self.add_standard_manufacture(0x0000BA, String::from("SankyoTateyama, Inc."));
+        self.add_standard_manufacture(0x0000C5, String::from("SANWA SHUTTER CORPORATION"));
+        self.add_standard_manufacture(0x000093, String::from("SATORI ELECTRIC CO.,LTD."));
+        self.add_standard_manufacture(0x000107, String::from("SEIKO ELECTRIC CO.,LTD."));
+        self.add_standard_manufacture(0x00003A, String::from("SEKISUI HOUSE, LTD."));
+        self.add_standard_manufacture(0x000005, String::from("Sharp Corp"));
         self.add_standard_manufacture(
             0x000131,
-            String::from("Shenzhen Eternalplanet Energy Pingshan Ltd."),
+            String::from("Shenzhen Eternalplanet Energy Pingshan Ltd."),
         );
-        self.add_standard_manufacture(0x0000AE, String::from("SHIKOKU ELECTRIC POWER CO.,INC."));
-        self.add_standard_manufacture(0x00002E, String::from("SHIKOKU INSTRUMENTATION CO.,LTD"));
+        self.add_standard_manufacture(0x0000AE, String::from("SHIKOKU ELECTRIC POWER CO.,INC."));
+        self.add_standard_manufacture(0x00002E, String::from("SHIKOKU INSTRUMENTATION CO.,LTD"));
         self.add_standard_manufacture(
             0x0000CE,
-            String::from("SHINDENGEN ELECTRIC MANUFACTURING CO.LTD."),
+            String::from("SHINDENGEN ELECTRIC MANUFACTURING CO.LTD."),
         );
-        self.add_standard_manufacture(0x00010D, String::from("Shizen Energy Inc."));
-        self.add_standard_manufacture(0x0000A8, String::from("Smart Power System. Co,. Ltd."));
-        self.add_standard_manufacture(0x0000DF, String::from("SMA Japan K.K."));
-        self.add_standard_manufacture(0x000100, String::from("Smart Solar Corporation"));
-        self.add_standard_manufacture(0x00007E, String::from("SMK Corporation"));
-        self.add_standard_manufacture(0x0000E1, String::from("SoftBank Corp."));
+        self.add_standard_manufacture(0x00010D, String::from("Shizen Energy Inc."));
+        self.add_standard_manufacture(0x0000A8, String::from("Smart Power System. Co,. Ltd."));
+        self.add_standard_manufacture(0x0000DF, String::from("SMA Japan K.K."));
+        self.add_standard_manufacture(0x000100, String::from("Smart Solar Corporation"));
+        self.add_standard_manufacture(0x00007E, String::from("SMK Corporation"));
+        self.add_standard_manufacture(0x0000E1, String::from("SoftBank Corp."));
         self.add_standard_manufacture(
             0x00011B,
-            String::from("SolaX Power Network Technology (Zhe jiang) Co. , Ltd."),
+            String::from("SolaX Power Network Technology (Zhe jiang) Co. , Ltd."),
         );
         self.add_standard_manufacture(
             0x000060,
-            String::from("Sony Computer Science Laboratories, Inc."),
-        );
-        self.add_standard_manufacture(0x00006E, String::from("Soundvision co.,ltd."));
-        self.add_standard_manufacture(0x000108, String::from("SOUSEI Technology Inc."));
-        self.add_standard_manufacture(0x000116, String::from("Sungrow Power Supply Co., Ltd."));
-        self.add_standard_manufacture(0x000101, String::from("Sunpot Co., Ltd"));
-        self.add_standard_manufacture(0x0000DB, String::from("Suntech Power Japan Corporation"));
-        self.add_standard_manufacture(0x00003D, String::from("SUMITOMO ELECTRIC INDUSTRIES, LTD."));
-        self.add_standard_manufacture(0x00003E, String::from("SUMITOMO ELECTRIC NETWORKS, INC."));
-        self.add_standard_manufacture(0x000085, String::from("TAKAOKA TOKO CO.,LTD"));
-        self.add_standard_manufacture(0x0000AF, String::from("Takara Standard Co.,Ltd"));
-        self.add_standard_manufacture(0x0000E4, String::from("technoeye Inc."));
-        self.add_standard_manufacture(0x0000FF, String::from("TEPCO Energy Partner, Inc."));
-        self.add_standard_manufacture(0x0000EE, String::from("TESSERA TECHNOLOGY INC."));
+            String::from("Sony Computer Science Laboratories, Inc."),
+        );
+        self.add_standard_manufacture(0x00006E, String::from("Soundvision co.,ltd."));
+        self.add_standard_manufacture(0x000108, String::from("SOUSEI Technology Inc."));
+        self.add_standard_manufacture(0x000116, String::from("Sungrow Power Supply Co., Ltd."));
+        self.add_standard_manufacture(0x000101, String::from("Sunpot Co., Ltd"));
+        self.add_standard_manufacture(0x0000DB, String::from("Suntech Power Japan Corporation"));
+        self.add_standard_manufacture(0x00003D, String::from("SUMITOMO ELECTRIC INDUSTRIES, LTD."));
+        self.add_standard_manufacture(0x00003E, String::from("SUMITOMO ELECTRIC NETWORKS, INC."));
+        self.add_standard_manufacture(0x000085, String::from("TAKAOKA TOKO CO.,LTD"));
+        self.add_standard_manufacture(0x0000AF, String::from("Takara Standard Co.,Ltd"));
+        self.add_standard_manufacture(0x0000E4, String::from("technoeye Inc."));
+        self.add_standard_manufacture(0x0000FF, String::from("TEPCO Energy Partner, Inc."));
+        self.add_standard_manufacture(0x0000EE, String::from("TESSERA TECHNOLOGY INC."));
         self.add_standard_manufacture(
             0x0000B5,
-            String::from("The Chugoku Electric Power Co., Ltd"),
+            String::from("The Chugoku Electric Power Co., Ltd"),
         );
         self.add_standard_manufacture(
             0x00009A,
-            String::from("The Kansai Electric Power Co., Inc."),
+            String::from("The Kansai Electric Power Co., Inc."),
         );
-        self.add_standard_manufacture(0x0000CD, String::from("TOCLAS CORPORATION"));
-        self.add_standard_manufacture(0x000126, String::from("Togami Electric Mfg.co.,Ltd."));
-        self.add_standard_manufacture(0x0000F9, String::from("TOHO ELECTRONICS INC."));
+        self.add_standard_manufacture(0x0000CD, String::from("TOCLAS CORPORATION"));
+        self.add_standard_manufacture(0x000126, String::from("Togami Electric Mfg.co.,Ltd."));
+        self.add_standard_manufacture(0x0000F9, String::from("TOHO ELECTRONICS INC."));
         self.add_standard_manufacture(
             0x0000C2,
-            String::from("Tohoku Electric Meter Industry Co.,Inc"),
+            String::from("Tohoku Electric Meter Industry Co.,Inc"),
         );
         self.add_standard_manufacture(
             0x0000BC,
-            String::from("TohokuElectric Power Network Company,Incorporated"),
+            String::from("TohokuElectric Power Network Company,Incorporated"),
         );
         self.add_standard_manufacture(
             0x000099,
-            String::from("Tokyo Electric Power Company Holdings, Inc."),
+            String::from("Tokyo Electric Power Company Holdings, Inc."),
         );
-        self.add_standard_manufacture(0x0000B3, String::from("TOPPERS Project, Inc."));
-        self.add_standard_manufacture(0x000111, String::from("Topre Corporation"));
-        self.add_standard_manufacture(0x000017, String::from("TOSHIBA CARRIER CORPORATION"));
-        self.add_standard_manufacture(0x000016, String::from("Toshiba Corp."));
+        self.add_standard_manufacture(0x0000B3, String::from("TOPPERS Project, Inc."));
+        self.add_standard_manufacture(0x000111, String::from("Topre Corporation"));
+        self.add_standard_manufacture(0x000017, String::from("TOSHIBA CARRIER CORPORATION"));
+        self.add_standard_manufacture(0x000016, String::from("Toshiba Corp."));
         self.add_standard_manufacture(
             0x000043,
-            String::from("TOSHIBA DEVELOPMENT & ENGINEERING CORPORATION"),
+            String::from("TOSHIBA DEVELOPMENT & ENGINEERING CORPORATION"),
         );
         self.add_standard_manufacture(
             0x0000EC,
-            String::from("Toshiba Energy Systems & Solutions Corporation"),
+            String::from("Toshiba Energy Systems & Solutions Corporation"),
         );
         self.add_standard_manufacture(
             0x0000D9,
-            String::from("Toshiba IT & Control Systems Corporation"),
+            String::from("Toshiba IT & Control Systems Corporation"),
         );
         self.add_standard_manufacture(
             0x000069,
-            String::from("Toshiba Lifestyle Products & Services Corporation"),
+            String::from("Toshiba Lifestyle Products & Services Corporation"),
         );
         self.add_standard_manufacture(
             0x00001B,
-            String::from("TOSHIBA LIGHTING & TECHNOLOGY CORPORATION"),
+            String::from("TOSHIBA LIGHTING & TECHNOLOGY CORPORATION"),
         );
         self.add_standard_manufacture(
             0x000035,
-            String::from("Toshiba Toko Meter Systems Co.,Ltd."),
-        );
-        self.add_standard_manufacture(0x000050, String::from("TOTO LTD."));
-        self.add_standard_manufacture(0x0000EF, String::from("TOYOTA INDUSTRIES CORPORATION"));
-        self.add_standard_manufacture(0x000121, String::from("TOYOTA MOTOR CORPORATION"));
-        self.add_standard_manufacture(0x00011F, String::from("TOYOTA TSUSHO CORPORATION"));
-        self.add_standard_manufacture(0x00005C, String::from("Tranceboot Co.,Ltd."));
-        self.add_standard_manufacture(0x000076, String::from("TSP CO.,Ltd"));
-        self.add_standard_manufacture(0x0000D0, String::from("TSUBAKIMOTO CHAIN CO."));
-        self.add_standard_manufacture(0x0000C1, String::from("Tsuken Electric Ind Co., Ltd."));
-        self.add_standard_manufacture(0x000053, String::from("Ubiquitous AI Corporation"));
-        self.add_standard_manufacture(0x000117, String::from("WWB Corporation"));
-        self.add_standard_manufacture(0x000095, String::from("Yamato Denki Co.,Ltd."));
-        self.add_standard_manufacture(0x00009E, String::from("YASKAWA ELECTRIC CORPORATION"));
-        self.add_standard_manufacture(0x00007A, String::from("ZUKEN ELMIC,INC."));
-        self.add_standard_manufacture(0x0000B4, String::from("4R Energy Corporation"));
-        self.add_standard_manufacture(0xFFFFFF, String::from("Experimental"));
-        self.add_standard_manufacture(0xFFFFFE, String::from("Undefined"));
+            String::from("Toshiba Toko Meter Systems Co.,Ltd."),
+        );
+        self.add_standard_manufacture(0x000050, String::from("TOTO LTD."));
+        self.add_standard_manufacture(0x0000EF, String::from("TOYOTA INDUSTRIES CORPORATION"));
+        self.add_standard_manufacture(0x000121, String::from("TOYOTA MOTOR CORPORATION"));
+        self.add_standard_manufacture(0x00011F, String::from("TOYOTA TSUSHO CORPORATION"));
+        self.add_standard_manufacture(0x00005C, String::from("Tranceboot Co.,Ltd."));
+        self.add_standard_manufacture(0x000076, String::from("TSP CO.,Ltd"));
+        self.add_standard_manufacture(0x0000D0, String::from("TSUBAKIMOTO CHAIN CO."));
+        self.add_standard_manufacture(0x0000C1, String::from("Tsuken Electric Ind Co., Ltd."));
+        self.add_standard_manufacture(0x000053, String::from("Ubiquitous AI Corporation"));
+        self.add_standard_manufacture(0x000117, String::from("WWB Corporation"));
+        self.add_standard_manufacture(0x000095, String::from("Yamato Denki Co.,Ltd."));
+        self.add_standard_manufacture(0x00009E, String::from("YASKAWA ELECTRIC CORPORATION"));
+        self.add_standard_manufacture(0x00007A, String::from("ZUKEN ELMIC,INC."));
+        self.add_standard_manufacture(0x0000B4, String::from("4R Energy Corporation"));
+        self.add_standard_manufacture(0xFFFFFF, String::from("Experimental"));
+        self.add_standard_manufacture(0xFFFFFE, String::from("Undefined"));
     }
 }
 
\ No newline at end of file diff --git a/src/echonet/database_mra_objects.rs.html b/src/echonet/database_mra_objects.rs.html index b58fa8f4..8b15b7c0 100644 --- a/src/echonet/database_mra_objects.rs.html +++ b/src/echonet/database_mra_objects.rs.html @@ -1,4 +1,6 @@ -database_mra_objects.rs - source
1
+database_mra_objects.rs - source
+    
1
 2
 3
 4
@@ -9690,14 +9692,14 @@
 9690
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
@@ -9735,10 +9737,10 @@
 }
 
 fn property_string_to_attribute(attr: &str) -> PropertyRule {
-    if attr == "required" {
+    if attr == "required" {
         return PropertyRule::Required;
     }
-    if attr == "optional" {
+    if attr == "optional" {
         return PropertyRule::Optional;
     }
     PropertyRule::Prohibited
@@ -9769,9612 +9771,9612 @@
     pub fn init_objects(&mut self) {
         let mut prop_enums = Vec::new();
         // Super class (0x0000)
-        let mut obj = self.create_standard_object("Super class".to_string(), 0x00, 0x00);
+        let mut obj = self.create_standard_object("Super class".to_string(), 0x00, 0x00);
         prop_enums.push(self.create_standard_property_enum(
             0x30,
-            "true".to_string(),
-            "ON".to_string(),
+            "true".to_string(),
+            "ON".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x31,
-            "false".to_string(),
-            "OFF".to_string(),
+            "false".to_string(),
+            "OFF".to_string(),
         ));
         obj.add_standard_property(
             0x80,
-            "Operation status".to_string(),
-            "state".to_string(),
+            "Operation status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x81,
-            "Installation location".to_string(),
-            "raw".to_string(),
+            "Installation location".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x81,
-            "Installation location".to_string(),
-            "".to_string(),
+            "Installation location".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x82,
-            "Standard version information".to_string(),
-            "raw".to_string(),
+            "Standard version information".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x83,
-            "Identification number".to_string(),
-            "raw".to_string(),
+            "Identification number".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x83,
-            "Identification number".to_string(),
-            "raw".to_string(),
+            "Identification number".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x84,
-            "Measured instantaneous power consumption".to_string(),
-            "number".to_string(),
+            "Measured instantaneous power consumption".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x85,
-            "Measured cumulative electric energy consumption".to_string(),
-            "number".to_string(),
+            "Measured cumulative electric energy consumption".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x86,
-            "Manufacturer's fault code".to_string(),
-            "raw".to_string(),
+            "Manufacturer's fault code".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x87,
-            "Current limit setting".to_string(),
-            "number".to_string(),
+            "Current limit setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x88,
-            "Fault status".to_string(),
-            "state".to_string(),
+            "Fault status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x89,
-            "Fault description".to_string(),
-            "raw".to_string(),
+            "Fault description".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x8A,
-            "Manufacturer code".to_string(),
-            "raw".to_string(),
+            "Manufacturer code".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x8B,
-            "Business facility code".to_string(),
-            "raw".to_string(),
+            "Business facility code".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x8C,
-            "Product code".to_string(),
-            "raw".to_string(),
+            "Product code".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x8D,
-            "Production number".to_string(),
-            "raw".to_string(),
+            "Production number".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x8E,
-            "Production date".to_string(),
-            "date".to_string(),
+            "Production date".to_string(),
+            "date".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x8F,
-            "Power-saving operation setting".to_string(),
-            "state".to_string(),
+            "Power-saving operation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x93,
-            "Location information".to_string(),
-            "raw".to_string(),
+            "Location information".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x93,
-            "Location information".to_string(),
-            "raw".to_string(),
+            "Location information".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x93,
-            "Remote control setting".to_string(),
-            "state".to_string(),
+            "Remote control setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x93,
-            "Remote control setting".to_string(),
-            "state".to_string(),
+            "Remote control setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x97,
-            "Current time setting".to_string(),
-            "time".to_string(),
+            "Current time setting".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x98,
-            "Current date setting".to_string(),
-            "date".to_string(),
+            "Current date setting".to_string(),
+            "date".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x99,
-            "Power limit setting".to_string(),
-            "number".to_string(),
+            "Power limit setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x9A,
-            "Cumulative operating time".to_string(),
-            "object".to_string(),
+            "Cumulative operating time".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x9D,
-            "Status change announcement property map".to_string(),
-            "raw".to_string(),
+            "Status change announcement property map".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x9E,
-            "Set property map".to_string(),
-            "raw".to_string(),
+            "Set property map".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x9F,
-            "Get property map".to_string(),
-            "raw".to_string(),
+            "Get property map".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Node profile (0x0EF0)
-        let mut obj = self.create_standard_object("Node profile".to_string(), 0x0E, 0xF0);
+        let mut obj = self.create_standard_object("Node profile".to_string(), 0x0E, 0xF0);
         obj.add_standard_property(
             0x80,
-            "Operating status".to_string(),
-            "state".to_string(),
+            "Operating status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x82,
-            "Version information".to_string(),
-            "raw".to_string(),
+            "Version information".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x83,
-            "Identification number".to_string(),
-            "raw".to_string(),
+            "Identification number".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "true".to_string(),
-            "YES".to_string(),
+            "true".to_string(),
+            "YES".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "false".to_string(),
-            "NO".to_string(),
+            "false".to_string(),
+            "NO".to_string(),
         ));
         obj.add_standard_property(
             0x88,
-            "Fault status".to_string(),
-            "state".to_string(),
+            "Fault status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x89,
-            "Fault description".to_string(),
-            "number".to_string(),
+            "Fault description".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x8A,
-            "Manufacturer code".to_string(),
-            "raw".to_string(),
+            "Manufacturer code".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x8B,
-            "Business facility code".to_string(),
-            "raw".to_string(),
+            "Business facility code".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x8C,
-            "Product code".to_string(),
-            "raw".to_string(),
+            "Product code".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x8D,
-            "Production number".to_string(),
-            "raw".to_string(),
+            "Production number".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x8E,
-            "Production date".to_string(),
-            "date".to_string(),
+            "Production date".to_string(),
+            "date".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x9D,
-            "Status change announcement property map".to_string(),
-            "raw".to_string(),
+            "Status change announcement property map".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x9E,
-            "Set property map".to_string(),
-            "raw".to_string(),
+            "Set property map".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x9F,
-            "Get property map".to_string(),
-            "raw".to_string(),
+            "Get property map".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xBF,
-            "Unique identifier data".to_string(),
-            "raw".to_string(),
+            "Unique identifier data".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD3,
-            "Number of self-node instances".to_string(),
-            "raw".to_string(),
+            "Number of self-node instances".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD4,
-            "Number of self-node classes".to_string(),
-            "number".to_string(),
+            "Number of self-node classes".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD5,
-            "Instance list notification".to_string(),
-            "object".to_string(),
+            "Instance list notification".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD6,
-            "Self-node instance list S".to_string(),
-            "object".to_string(),
+            "Self-node instance list S".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD7,
-            "Self-node class list S".to_string(),
-            "object".to_string(),
+            "Self-node class list S".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Hybrid water heater (0x02A6)
-        let mut obj = self.create_standard_object("Hybrid water heater".to_string(), 0x02, 0xA6);
+        let mut obj = self.create_standard_object("Hybrid water heater".to_string(), 0x02, 0xA6);
         obj.add_standard_property(
             0xB0,
-            "Automatic water heating setting".to_string(),
-            "state".to_string(),
+            "Automatic water heating setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB2,
-            "Water heating status".to_string(),
-            "state".to_string(),
+            "Water heating status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB3,
-            "Heater status".to_string(),
-            "state".to_string(),
+            "Heater status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB6,
-            "Hot water supply mode setting for auxiliary heat source machine".to_string(),
-            "state".to_string(),
+            "Hot water supply mode setting for auxiliary heat source machine".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB7,
-            "Heater mode setting for auxiliary heat source machine.".to_string(),
-            "state".to_string(),
+            "Heater mode setting for auxiliary heat source machine.".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB8,
-            "Linkage mode setting for solar power generation".to_string(),
-            "state".to_string(),
+            "Linkage mode setting for solar power generation".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB9,
-            "Solar power generations utilization time".to_string(),
-            "object".to_string(),
+            "Solar power generations utilization time".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC3,
-            "Hot water supply status".to_string(),
-            "state".to_string(),
+            "Hot water supply status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE1,
-            "Measured amount of hot water remaining in tank".to_string(),
-            "number".to_string(),
+            "Measured amount of hot water remaining in tank".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE2,
-            "Tank capacity".to_string(),
-            "number".to_string(),
+            "Tank capacity".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Switch (supporting JEM-A/HA terminals) (0x05FD)
         let mut obj = self.create_standard_object(
-            "Switch (supporting JEM-A/HA terminals)".to_string(),
+            "Switch (supporting JEM-A/HA terminals)".to_string(),
             0x05,
             0xFD,
         );
         obj.add_standard_property(
             0xE0,
-            "Connected device".to_string(),
-            "raw".to_string(),
+            "Connected device".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Instantaneous water heater (0x0272)
         let mut obj =
-            self.create_standard_object("Instantaneous water heater".to_string(), 0x02, 0x72);
+            self.create_standard_object("Instantaneous water heater".to_string(), 0x02, 0x72);
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "true".to_string(),
-            "Reservation ON".to_string(),
+            "true".to_string(),
+            "Reservation ON".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "false".to_string(),
-            "Reservation OFF".to_string(),
+            "false".to_string(),
+            "Reservation OFF".to_string(),
         ));
         obj.add_standard_property(
             0x90,
-            "ON timer reservation setting".to_string(),
-            "state".to_string(),
+            "ON timer reservation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x91,
-            "ON timer setting".to_string(),
-            "time".to_string(),
+            "ON timer setting".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x92,
-            "Set value of ON timer relative time".to_string(),
-            "time".to_string(),
+            "Set value of ON timer relative time".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD0,
-            "Hot water heating status".to_string(),
-            "state".to_string(),
+            "Hot water heating status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD1,
-            "Set value of hot water temperature".to_string(),
-            "number".to_string(),
+            "Set value of hot water temperature".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD2,
-            "Hot water warmer setting".to_string(),
-            "state".to_string(),
+            "Hot water warmer setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD4,
-            "Bath water volume setting 4".to_string(),
-            "number".to_string(),
+            "Bath water volume setting 4".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD5,
-            "Bath water volume setting 4 Maximum settable level".to_string(),
-            "number".to_string(),
+            "Bath water volume setting 4 Maximum settable level".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD6,
-            "Volume setting".to_string(),
-            "number".to_string(),
+            "Volume setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD7,
-            "Mute setting".to_string(),
-            "state".to_string(),
+            "Mute setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDA,
-            "Duration of Automatic operation setting".to_string(),
-            "".to_string(),
+            "Duration of Automatic operation setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDB,
-            "Remaining Automatic operation time".to_string(),
-            "".to_string(),
+            "Remaining Automatic operation time".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE1,
-            "Set value of bath temperature".to_string(),
-            "number".to_string(),
+            "Set value of bath temperature".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE2,
-            "Bath water heater status".to_string(),
-            "state".to_string(),
+            "Bath water heater status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE3,
-            "Bath Auto mode setting".to_string(),
-            "state".to_string(),
+            "Bath Auto mode setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required_o"),
-            property_string_to_attribute("required_o"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_o"),
+            property_string_to_attribute("required_o"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE4,
-            "Bath additional boil-up operation setting".to_string(),
-            "state".to_string(),
+            "Bath additional boil-up operation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE5,
-            "Bath hot water adding operation setting".to_string(),
-            "state".to_string(),
+            "Bath hot water adding operation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE6,
-            "Bath water temperature lowering operation setting".to_string(),
-            "state".to_string(),
+            "Bath water temperature lowering operation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE7,
-            "Bath hot water volume setting 1".to_string(),
-            "number".to_string(),
+            "Bath hot water volume setting 1".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE8,
-            "Bath hot water volume setting 2".to_string(),
-            "level".to_string(),
+            "Bath hot water volume setting 2".to_string(),
+            "level".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE9,
-            "Bathroom priority setting".to_string(),
-            "state".to_string(),
+            "Bathroom priority setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE9,
-            "Bathroom priority setting".to_string(),
-            "state".to_string(),
+            "Bathroom priority setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEA,
-            "Shower hot water supply status".to_string(),
-            "state".to_string(),
+            "Shower hot water supply status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEB,
-            "Kitchen hot water supply status".to_string(),
-            "state".to_string(),
+            "Kitchen hot water supply status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "true".to_string(),
-            "Reservation ON".to_string(),
+            "true".to_string(),
+            "Reservation ON".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "false".to_string(),
-            "Reservation OFF".to_string(),
+            "false".to_string(),
+            "Reservation OFF".to_string(),
         ));
         obj.add_standard_property(
             0xEC,
-            "Hot water warmer ON timer reservation setting".to_string(),
-            "state".to_string(),
+            "Hot water warmer ON timer reservation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xED,
-            "Set value of hot water warmer ON timer time".to_string(),
-            "time".to_string(),
+            "Set value of hot water warmer ON timer time".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEE,
-            "Bath hot water volume setting 3".to_string(),
-            "number".to_string(),
+            "Bath hot water volume setting 3".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEF,
-            "Bath operation status monitor".to_string(),
-            "state".to_string(),
+            "Bath operation status monitor".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Commercial showcase (0x03CE)
-        let mut obj = self.create_standard_object("Commercial showcase".to_string(), 0x03, 0xCE);
+        let mut obj = self.create_standard_object("Commercial showcase".to_string(), 0x03, 0xCE);
         obj.add_standard_property(
             0xB0,
-            "Operation mode".to_string(),
-            "state".to_string(),
+            "Operation mode".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB0,
-            "Operation mode setting".to_string(),
-            "state".to_string(),
+            "Operation mode setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xBD,
-            "Used to acquire measurements of discharge temperature.".to_string(),
-            "number".to_string(),
+            "Used to acquire measurements of discharge temperature.".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCA,
-            "Group information".to_string(),
-            "raw".to_string(),
+            "Group information".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCA,
-            "Group information".to_string(),
-            "".to_string(),
+            "Group information".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD0,
-            "This property indicates the type of the showcase.".to_string(),
-            "state".to_string(),
+            "This property indicates the type of the showcase.".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD1,
-            "This property indicates the type of the showcase door.".to_string(),
-            "state".to_string(),
+            "This property indicates the type of the showcase door.".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD2,
-            "This property indicates refrigerator type, such as built-in or separate.".to_string(),
-            "state".to_string(),
+            "This property indicates refrigerator type, such as built-in or separate.".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD3,
-            "This property indicates the shape of the showcase.".to_string(),
-            "state".to_string(),
+            "This property indicates the shape of the showcase.".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
-        obj.add_standard_property(0xD4, "This property indicates the purpose of the showcase, either refrigeration or freezing.".to_string(), "state".to_string(), 1, property_string_to_attribute("required"), property_string_to_attribute("notApplicable"), property_string_to_attribute("optional"), &mut prop_enums);
+        obj.add_standard_property(0xD4, "This property indicates the purpose of the showcase, either refrigeration or freezing.".to_string(), "state".to_string(), 1, property_string_to_attribute("required"), property_string_to_attribute("notApplicable"), property_string_to_attribute("optional"), &mut prop_enums);
         prop_enums.push(self.create_standard_property_enum(
             0x30,
-            "true".to_string(),
-            "On".to_string(),
+            "true".to_string(),
+            "On".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x31,
-            "false".to_string(),
-            "Off".to_string(),
+            "false".to_string(),
+            "Off".to_string(),
         ));
         obj.add_standard_property(
             0xE0,
-            "Indicates on/off status of lighting installed inside the showcase.".to_string(),
-            "state".to_string(),
+            "Indicates on/off status of lighting installed inside the showcase.".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x30,
-            "true".to_string(),
-            "On".to_string(),
+            "true".to_string(),
+            "On".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x31,
-            "false".to_string(),
-            "Off".to_string(),
+            "false".to_string(),
+            "Off".to_string(),
         ));
         obj.add_standard_property(
             0xE1,
-            "Indicates ON/OFF status of lighting installed outside the showcase.".to_string(),
-            "state".to_string(),
+            "Indicates ON/OFF status of lighting installed outside the showcase.".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x30,
-            "true".to_string(),
-            "On".to_string(),
+            "true".to_string(),
+            "On".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x31,
-            "false".to_string(),
-            "Off".to_string(),
+            "false".to_string(),
+            "Off".to_string(),
         ));
         obj.add_standard_property(
             0xE2,
-            "Indicates on/off status of compressor when showcase and compressor are a single unit."
+            "Indicates on/off status of compressor when showcase and compressor are a single unit."
                 .to_string(),
-            "state".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE3,
-            "Used to acquire internal temperature measurements inside the showcase.".to_string(),
-            "number".to_string(),
+            "Used to acquire internal temperature measurements inside the showcase.".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE4,
-            "Indicates rated power consumption necessary when showcase is cooling.".to_string(),
-            "number".to_string(),
+            "Indicates rated power consumption necessary when showcase is cooling.".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
-        obj.add_standard_property(0xE5, "Indicates rated power consumption when heater is operating during showcase defrosting.".to_string(), "number".to_string(), 0, property_string_to_attribute("optional"), property_string_to_attribute("notApplicable"), property_string_to_attribute("optional"), &mut prop_enums);
+        obj.add_standard_property(0xE5, "Indicates rated power consumption when heater is operating during showcase defrosting.".to_string(), "number".to_string(), 0, property_string_to_attribute("optional"), property_string_to_attribute("notApplicable"), property_string_to_attribute("optional"), &mut prop_enums);
         obj.add_standard_property(
             0xE6,
-            "Indicates rated power consumption when showcase is operating fan motor.".to_string(),
-            "number".to_string(),
+            "Indicates rated power consumption when showcase is operating fan motor.".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x30,
-            "true".to_string(),
-            "On".to_string(),
+            "true".to_string(),
+            "On".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x31,
-            "false".to_string(),
-            "Off".to_string(),
+            "false".to_string(),
+            "Off".to_string(),
         ));
         obj.add_standard_property(
             0xE7,
-            "Indicates on/off status of showcases with heater for hot function.".to_string(),
-            "state".to_string(),
+            "Indicates on/off status of showcases with heater for hot function.".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "fluorescent".to_string(),
-            "Fluorescent light".to_string(),
+            "fluorescent".to_string(),
+            "Fluorescent light".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "led".to_string(),
-            "LED".to_string(),
+            "led".to_string(),
+            "LED".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x43,
-            "noLighting".to_string(),
-            "No lighting".to_string(),
+            "noLighting".to_string(),
+            "No lighting".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x40,
-            "other".to_string(),
-            "Other".to_string(),
+            "other".to_string(),
+            "Other".to_string(),
         ));
         obj.add_standard_property(
             0xEB,
-            "Indicates type of lighting installed inside the showcase.".to_string(),
-            "state".to_string(),
+            "Indicates type of lighting installed inside the showcase.".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "fluorescent".to_string(),
-            "Fluorescent light".to_string(),
+            "fluorescent".to_string(),
+            "Fluorescent light".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "led".to_string(),
-            "LED".to_string(),
+            "led".to_string(),
+            "LED".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x43,
-            "noLighting".to_string(),
-            "No lighting".to_string(),
+            "noLighting".to_string(),
+            "No lighting".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x40,
-            "other".to_string(),
-            "Other".to_string(),
+            "other".to_string(),
+            "Other".to_string(),
         ));
         obj.add_standard_property(
             0xEC,
-            "Indicates type of lighting installed outside the showcase.".to_string(),
-            "state".to_string(),
+            "Indicates type of lighting installed outside the showcase.".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xED,
-            "Indicates lighting level in % installed inside of the showcase.".to_string(),
-            "number".to_string(),
+            "Indicates lighting level in % installed inside of the showcase.".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEE,
-            "Indicates lighting level in % installed outside of the showcase.".to_string(),
-            "number".to_string(),
+            "Indicates lighting level in % installed outside of the showcase.".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEF,
-            "Set temperature setting of inside the case and acquire the current setting."
+            "Set temperature setting of inside the case and acquire the current setting."
                 .to_string(),
-            "number".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Illuminance sensor (0x00D0)
-        let mut obj = self.create_standard_object("Illuminance sensor".to_string(), 0x00, 0xD0);
+        let mut obj = self.create_standard_object("Illuminance sensor".to_string(), 0x00, 0xD0);
         obj.add_standard_property(
             0xE0,
-            "Measured illuminance value 1".to_string(),
-            "number".to_string(),
+            "Measured illuminance value 1".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE1,
-            "Measured illuminance value 2".to_string(),
-            "number".to_string(),
+            "Measured illuminance value 2".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Television (0x0602)
-        let mut obj = self.create_standard_object("Television".to_string(), 0x06, 0x02);
+        let mut obj = self.create_standard_object("Television".to_string(), 0x06, 0x02);
         prop_enums.push(self.create_standard_property_enum(
             0x30,
-            "true".to_string(),
-            "On".to_string(),
+            "true".to_string(),
+            "On".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x31,
-            "false".to_string(),
-            "Off".to_string(),
+            "false".to_string(),
+            "Off".to_string(),
         ));
         obj.add_standard_property(
             0x80,
-            "Operation status".to_string(),
-            "state".to_string(),
+            "Operation status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required_o"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required_o"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB0,
-            "Display control setting".to_string(),
-            "state".to_string(),
+            "Display control setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB1,
-            "Character string setting acceptance status".to_string(),
-            "state".to_string(),
+            "Character string setting acceptance status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required_o"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required_o"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB2,
-            "Supported character codes".to_string(),
-            "bitmap".to_string(),
+            "Supported character codes".to_string(),
+            "bitmap".to_string(),
             2,
-            property_string_to_attribute("required_o"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_o"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB3,
-            "Character string to present to the user".to_string(),
-            "object".to_string(),
+            "Character string to present to the user".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB4,
-            "Length of character string accepted".to_string(),
-            "object".to_string(),
+            "Length of character string accepted".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required_o"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_o"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // EV charger and discharger (0x027E)
         let mut obj =
-            self.create_standard_object("EV charger and discharger".to_string(), 0x02, 0x7E);
+            self.create_standard_object("EV charger and discharger".to_string(), 0x02, 0x7E);
         obj.add_standard_property(
             0xC0,
-            "Dischargeable capacity of vehicle mounted battery 1".to_string(),
-            "number".to_string(),
+            "Dischargeable capacity of vehicle mounted battery 1".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC1,
-            "Dischargeable capacity of vehicle mounted battery 2".to_string(),
-            "number".to_string(),
+            "Dischargeable capacity of vehicle mounted battery 2".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC1,
-            "Dischargeable capacity of vehicle mounted battery 2".to_string(),
-            "number".to_string(),
+            "Dischargeable capacity of vehicle mounted battery 2".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC2,
-            "Remaining dischargeable capacity of vehicle mounted battery 1".to_string(),
-            "number".to_string(),
+            "Remaining dischargeable capacity of vehicle mounted battery 1".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC3,
-            "Remaining dischargeable capacity of vehicle mounted battery 2".to_string(),
-            "number".to_string(),
+            "Remaining dischargeable capacity of vehicle mounted battery 2".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC3,
-            "Remaining dischargeable capacity of vehicle mounted battery 2".to_string(),
-            "number".to_string(),
+            "Remaining dischargeable capacity of vehicle mounted battery 2".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC4,
-            "Remaining dischargeable capacity of vehicle mounted battery 3".to_string(),
-            "number".to_string(),
+            "Remaining dischargeable capacity of vehicle mounted battery 3".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC5,
-            "Rated charge capacity".to_string(),
-            "number".to_string(),
+            "Rated charge capacity".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC6,
-            "Rated discharge capacity".to_string(),
-            "number".to_string(),
+            "Rated discharge capacity".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC7,
-            "Vehicle connection and chargeable/dischargeable status".to_string(),
-            "state".to_string(),
+            "Vehicle connection and chargeable/dischargeable status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC7,
-            "Vehicle connection and chargeable/dischargeable status".to_string(),
-            "state".to_string(),
+            "Vehicle connection and chargeable/dischargeable status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC7,
-            "Vehicle connection and chargeable/dischargeable status".to_string(),
-            "state".to_string(),
+            "Vehicle connection and chargeable/dischargeable status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC8,
-            "Minimum/maximum charging electric energy".to_string(),
-            "object".to_string(),
+            "Minimum/maximum charging electric energy".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC9,
-            "Minimum/maximum discharging electric energy".to_string(),
-            "object".to_string(),
+            "Minimum/maximum discharging electric energy".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCA,
-            "Minimum/maximum charging current".to_string(),
-            "object".to_string(),
+            "Minimum/maximum charging current".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCB,
-            "Minimum/maximum discharging current".to_string(),
-            "object".to_string(),
+            "Minimum/maximum discharging current".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCC,
-            "Charger/Discharger type".to_string(),
-            "state".to_string(),
+            "Charger/Discharger type".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCD,
-            "Vehicle connection confirmation".to_string(),
-            "state".to_string(),
+            "Vehicle connection confirmation".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCE,
-            "Chargeable capacity of vehicle mounted battery".to_string(),
-            "number".to_string(),
+            "Chargeable capacity of vehicle mounted battery".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCF,
-            "Remaining chargeable capacity of vehicle mounted battery".to_string(),
-            "number".to_string(),
+            "Remaining chargeable capacity of vehicle mounted battery".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD0,
-            "Used capacity of vehicle mounted battery 1".to_string(),
-            "number".to_string(),
+            "Used capacity of vehicle mounted battery 1".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD1,
-            "Used capacity of vehicle mounted battery 2".to_string(),
-            "number".to_string(),
+            "Used capacity of vehicle mounted battery 2".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD1,
-            "Used capacity of vehicle mounted battery 2".to_string(),
-            "number".to_string(),
+            "Used capacity of vehicle mounted battery 2".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD2,
-            "Rated voltage".to_string(),
-            "number".to_string(),
+            "Rated voltage".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD3,
-            "Measured instantaneous charging/discharging electric energy".to_string(),
-            "number".to_string(),
+            "Measured instantaneous charging/discharging electric energy".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD4,
-            "Measured instantaneous charging/discharging current".to_string(),
-            "number".to_string(),
+            "Measured instantaneous charging/discharging current".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD5,
-            "Measured instantaneous charging/discharging voltage".to_string(),
-            "number".to_string(),
+            "Measured instantaneous charging/discharging voltage".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD6,
-            "Measured cumulative amount of discharging electric energy".to_string(),
-            "number".to_string(),
+            "Measured cumulative amount of discharging electric energy".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x00,
-            "reset".to_string(),
-            "Reset".to_string(),
+            "reset".to_string(),
+            "Reset".to_string(),
         ));
         obj.add_standard_property(
             0xD7,
-            "Cumulative amount of discharging electric energy reset setting".to_string(),
-            "state".to_string(),
+            "Cumulative amount of discharging electric energy reset setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD8,
-            "Measured cumulative amount of charging electric energy".to_string(),
-            "number".to_string(),
+            "Measured cumulative amount of charging electric energy".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x00,
-            "reset".to_string(),
-            "Reset".to_string(),
+            "reset".to_string(),
+            "Reset".to_string(),
         ));
         obj.add_standard_property(
             0xD9,
-            "Cumulative amount of charging electric energy reset setting".to_string(),
-            "state".to_string(),
+            "Cumulative amount of charging electric energy reset setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDA,
-            "Operation mode setting".to_string(),
-            "state".to_string(),
+            "Operation mode setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDA,
-            "Operation mode setting".to_string(),
-            "state".to_string(),
+            "Operation mode setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDA,
-            "Operation mode setting".to_string(),
-            "state".to_string(),
+            "Operation mode setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDA,
-            "Operation mode setting".to_string(),
-            "state".to_string(),
+            "Operation mode setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDB,
-            "System interconnected type".to_string(),
-            "state".to_string(),
+            "System interconnected type".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDC,
-            "Charging method".to_string(),
-            "state".to_string(),
+            "Charging method".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDC,
-            "Charging method".to_string(),
-            "state".to_string(),
+            "Charging method".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDD,
-            "Discharging method".to_string(),
-            "state".to_string(),
+            "Discharging method".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDD,
-            "Discharging method".to_string(),
-            "state".to_string(),
+            "Discharging method".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDE,
-            "Purchasing electric power setting".to_string(),
-            "number".to_string(),
+            "Purchasing electric power setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDF,
-            "Re-interconnection permission setting".to_string(),
-            "state".to_string(),
+            "Re-interconnection permission setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE0,
-            "Charging/Discharging electric power setting".to_string(),
-            "number".to_string(),
+            "Charging/Discharging electric power setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE1,
-            "Working operation status".to_string(),
-            "state".to_string(),
+            "Working operation status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE2,
-            "Remaining stored electricity of vehicle mounted battery1".to_string(),
-            "number".to_string(),
+            "Remaining stored electricity of vehicle mounted battery1".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE3,
-            "Remaining stored electricity of vehicle mounted battery2".to_string(),
-            "number".to_string(),
+            "Remaining stored electricity of vehicle mounted battery2".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE3,
-            "Remaining stored electricity of vehicle mounted battery2".to_string(),
-            "number".to_string(),
+            "Remaining stored electricity of vehicle mounted battery2".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE4,
-            "Remaining stored electricity of vehicle mounted battery3".to_string(),
-            "number".to_string(),
+            "Remaining stored electricity of vehicle mounted battery3".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE5,
-            "Maintenance status".to_string(),
-            "state".to_string(),
+            "Maintenance status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE6,
-            "Vehicle ID".to_string(),
-            "object".to_string(),
+            "Vehicle ID".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE7,
-            "Charging amount setting 1".to_string(),
-            "number".to_string(),
+            "Charging amount setting 1".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE9,
-            "Charging amount setting 2".to_string(),
-            "number".to_string(),
+            "Charging amount setting 2".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEA,
-            "Discharging electric energy setting".to_string(),
-            "number".to_string(),
+            "Discharging electric energy setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEB,
-            "Charging electric energy setting".to_string(),
-            "number".to_string(),
+            "Charging electric energy setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEC,
-            "Discharging electric energy setting".to_string(),
-            "number".to_string(),
+            "Discharging electric energy setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xED,
-            "Charging current setting".to_string(),
-            "number".to_string(),
+            "Charging current setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEE,
-            "Discharging current setting".to_string(),
-            "number".to_string(),
+            "Discharging current setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEF,
-            "Rated voltage (Independent)".to_string(),
-            "number".to_string(),
+            "Rated voltage (Independent)".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Package-type commercial air conditioner (outdoor unit) (0x0157)
         let mut obj = self.create_standard_object(
-            "Package-type commercial air conditioner (outdoor unit)".to_string(),
+            "Package-type commercial air conditioner (outdoor unit)".to_string(),
             0x01,
             0x57,
         );
         obj.add_standard_property(
             0xAB,
-            "Special state".to_string(),
-            "state".to_string(),
+            "Special state".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB8,
-            "Rated power consumption of outdoor unit".to_string(),
-            "object".to_string(),
+            "Rated power consumption of outdoor unit".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xBE,
-            "Measured outdoor unit temperature".to_string(),
-            "".to_string(),
+            "Measured outdoor unit temperature".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCA,
-            "Group information".to_string(),
-            "".to_string(),
+            "Group information".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDB,
-            "Measured power consumption of outdoor unit".to_string(),
-            "number".to_string(),
+            "Measured power consumption of outdoor unit".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDD,
-            "Possible power savings for outdoor units".to_string(),
-            "number".to_string(),
+            "Possible power savings for outdoor units".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDE,
-            "Settings restricting power consumption of outdoor units".to_string(),
-            "".to_string(),
+            "Settings restricting power consumption of outdoor units".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDF,
-            "Minimum power consumption for restricted outdoor unit".to_string(),
-            "number".to_string(),
+            "Minimum power consumption for restricted outdoor unit".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Humidity sensor (0x0012)
-        let mut obj = self.create_standard_object("Humidity sensor".to_string(), 0x00, 0x12);
+        let mut obj = self.create_standard_object("Humidity sensor".to_string(), 0x00, 0x12);
         obj.add_standard_property(
             0xE0,
-            "Measured value of relative humidity".to_string(),
-            "number".to_string(),
+            "Measured value of relative humidity".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Mono functional lighting (0x0291)
         let mut obj =
-            self.create_standard_object("Mono functional lighting".to_string(), 0x02, 0x91);
+            self.create_standard_object("Mono functional lighting".to_string(), 0x02, 0x91);
         prop_enums.push(self.create_standard_property_enum(
             0x30,
-            "true".to_string(),
-            "On".to_string(),
+            "true".to_string(),
+            "On".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x31,
-            "false".to_string(),
-            "Off".to_string(),
+            "false".to_string(),
+            "Off".to_string(),
         ));
         obj.add_standard_property(
             0x80,
-            "Operation status".to_string(),
-            "state".to_string(),
+            "Operation status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB0,
-            "Light level Setting".to_string(),
-            "number".to_string(),
+            "Light level Setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Power distribution board metering (0x0287)
         let mut obj = self.create_standard_object(
-            "Power distribution board metering".to_string(),
+            "Power distribution board metering".to_string(),
             0x02,
             0x87,
         );
         obj.add_standard_property(
             0xB0,
-            "Master rated capacity".to_string(),
-            "number".to_string(),
+            "Master rated capacity".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB1,
-            "Number of measurement channels (simplex)".to_string(),
-            "".to_string(),
+            "Number of measurement channels (simplex)".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
-        obj.add_standard_property(0xB2, "Channel range specification for cumulative amount of electric power consumption measurement (simplex)".to_string(), "object".to_string(), 0, property_string_to_attribute("optional"), property_string_to_attribute("optional"), property_string_to_attribute("optional"), &mut prop_enums);
+        obj.add_standard_property(0xB2, "Channel range specification for cumulative amount of electric power consumption measurement (simplex)".to_string(), "object".to_string(), 0, property_string_to_attribute("optional"), property_string_to_attribute("optional"), property_string_to_attribute("optional"), &mut prop_enums);
         obj.add_standard_property(
             0xB3,
-            "Measured cumulative amount of electric power consumption list (simplex)".to_string(),
-            "object".to_string(),
+            "Measured cumulative amount of electric power consumption list (simplex)".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB4,
-            "Channel range specification for instantaneous current measurement (simplex)"
+            "Channel range specification for instantaneous current measurement (simplex)"
                 .to_string(),
-            "object".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB5,
-            "Measured instantaneous current list (simplex)".to_string(),
-            "object".to_string(),
+            "Measured instantaneous current list (simplex)".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB6,
-            "Channel range specification for instantaneous power consumption measurement (simplex)"
+            "Channel range specification for instantaneous power consumption measurement (simplex)"
                 .to_string(),
-            "object".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB7,
-            "Measured instantaneous power consumption list (simplex)".to_string(),
-            "object".to_string(),
+            "Measured instantaneous power consumption list (simplex)".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB8,
-            "Number of measurement channels (duplex)".to_string(),
-            "".to_string(),
+            "Number of measurement channels (duplex)".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
-        obj.add_standard_property(0xB9, "Channel range specification for cumulative amount of electric power consumption measurement (duplex)".to_string(), "object".to_string(), 0, property_string_to_attribute("optional"), property_string_to_attribute("optional"), property_string_to_attribute("optional"), &mut prop_enums);
+        obj.add_standard_property(0xB9, "Channel range specification for cumulative amount of electric power consumption measurement (duplex)".to_string(), "object".to_string(), 0, property_string_to_attribute("optional"), property_string_to_attribute("optional"), property_string_to_attribute("optional"), &mut prop_enums);
         obj.add_standard_property(
             0xBA,
-            "Measured cumulative amount of electric power consumption list (duplex)".to_string(),
-            "object".to_string(),
+            "Measured cumulative amount of electric power consumption list (duplex)".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xBB,
-            "Channel range specification for instantaneous current measurement (duplex)"
+            "Channel range specification for instantaneous current measurement (duplex)"
                 .to_string(),
-            "object".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xBC,
-            "Measured instantaneous current list (duplex)".to_string(),
-            "object".to_string(),
+            "Measured instantaneous current list (duplex)".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xBD,
-            "Channel range specification for instantaneous power consumption measurement (duplex)"
+            "Channel range specification for instantaneous power consumption measurement (duplex)"
                 .to_string(),
-            "object".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xBE,
-            "Measured instantaneous power consumption list (duplex)".to_string(),
-            "object".to_string(),
+            "Measured instantaneous power consumption list (duplex)".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC0,
-            "Measured cumulative amount of electric energy (normal direction)".to_string(),
-            "".to_string(),
+            "Measured cumulative amount of electric energy (normal direction)".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC1,
-            "Measured cumulative amount of electric energy (reverse direction)".to_string(),
-            "".to_string(),
+            "Measured cumulative amount of electric energy (reverse direction)".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC2,
-            "Unit for cumulative amounts of electric energy".to_string(),
-            "numericValue".to_string(),
+            "Unit for cumulative amounts of electric energy".to_string(),
+            "numericValue".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC3,
-            "Historical data of measured cumulative amounts of electric energy (normal direction)"
+            "Historical data of measured cumulative amounts of electric energy (normal direction)"
                 .to_string(),
-            "object".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC4,
-            "Historical data of measured cumulative amounts of electric energy (reverse direction)"
+            "Historical data of measured cumulative amounts of electric energy (reverse direction)"
                 .to_string(),
-            "object".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
-        obj.add_standard_property(0xC5, "Day for which the historical data of measured cumulative amounts of electric energy is to be retrieved".to_string(), "".to_string(), 0, property_string_to_attribute("optional"), property_string_to_attribute("optional"), property_string_to_attribute("optional"), &mut prop_enums);
+        obj.add_standard_property(0xC5, "Day for which the historical data of measured cumulative amounts of electric energy is to be retrieved".to_string(), "".to_string(), 0, property_string_to_attribute("optional"), property_string_to_attribute("optional"), property_string_to_attribute("optional"), &mut prop_enums);
         obj.add_standard_property(
             0xC6,
-            "Measured instantaneous amount of electric energy".to_string(),
-            "".to_string(),
+            "Measured instantaneous amount of electric energy".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC7,
-            "Measured instantaneous currents".to_string(),
-            "object".to_string(),
+            "Measured instantaneous currents".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC8,
-            "Measured instantaneous voltages".to_string(),
-            "object".to_string(),
+            "Measured instantaneous voltages".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD0,
-            "Measurement channel 1".to_string(),
-            "object".to_string(),
+            "Measurement channel 1".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD1,
-            "Measurement channel 2".to_string(),
-            "object".to_string(),
+            "Measurement channel 2".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD2,
-            "Measurement channel 3".to_string(),
-            "object".to_string(),
+            "Measurement channel 3".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD3,
-            "Measurement channel 4".to_string(),
-            "object".to_string(),
+            "Measurement channel 4".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD4,
-            "Measurement channel 5".to_string(),
-            "object".to_string(),
+            "Measurement channel 5".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD5,
-            "Measurement channel 6".to_string(),
-            "object".to_string(),
+            "Measurement channel 6".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD6,
-            "Measurement channel 7".to_string(),
-            "object".to_string(),
+            "Measurement channel 7".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD7,
-            "Measurement channel 8".to_string(),
-            "object".to_string(),
+            "Measurement channel 8".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD8,
-            "Measurement channel 9".to_string(),
-            "object".to_string(),
+            "Measurement channel 9".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD9,
-            "Measurement channel 10".to_string(),
-            "object".to_string(),
+            "Measurement channel 10".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDA,
-            "Measurement channel 11".to_string(),
-            "object".to_string(),
+            "Measurement channel 11".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDB,
-            "Measurement channel 12".to_string(),
-            "object".to_string(),
+            "Measurement channel 12".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDC,
-            "Measurement channel 13".to_string(),
-            "object".to_string(),
+            "Measurement channel 13".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDD,
-            "Measurement channel 14".to_string(),
-            "object".to_string(),
+            "Measurement channel 14".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDE,
-            "Measurement channel 15".to_string(),
-            "object".to_string(),
+            "Measurement channel 15".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDF,
-            "Measurement channel 16".to_string(),
-            "object".to_string(),
+            "Measurement channel 16".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE0,
-            "Measurement channel 17".to_string(),
-            "object".to_string(),
+            "Measurement channel 17".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE1,
-            "Measurement channel 18".to_string(),
-            "object".to_string(),
+            "Measurement channel 18".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE2,
-            "Measurement channel 19".to_string(),
-            "object".to_string(),
+            "Measurement channel 19".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE3,
-            "Measurement channel 20".to_string(),
-            "object".to_string(),
+            "Measurement channel 20".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE4,
-            "Measurement channel 21".to_string(),
-            "object".to_string(),
+            "Measurement channel 21".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE5,
-            "Measurement channel 22".to_string(),
-            "object".to_string(),
+            "Measurement channel 22".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE6,
-            "Measurement channel 23".to_string(),
-            "object".to_string(),
+            "Measurement channel 23".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE7,
-            "Measurement channel 24".to_string(),
-            "object".to_string(),
+            "Measurement channel 24".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE8,
-            "Measurement channel 25".to_string(),
-            "object".to_string(),
+            "Measurement channel 25".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE9,
-            "Measurement channel 26".to_string(),
-            "object".to_string(),
+            "Measurement channel 26".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEA,
-            "Measurement channel 27".to_string(),
-            "object".to_string(),
+            "Measurement channel 27".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEB,
-            "Measurement channel 28".to_string(),
-            "object".to_string(),
+            "Measurement channel 28".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEC,
-            "Measurement channel 29".to_string(),
-            "object".to_string(),
+            "Measurement channel 29".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xED,
-            "Measurement channel 30".to_string(),
-            "object".to_string(),
+            "Measurement channel 30".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEE,
-            "Measurement channel 31".to_string(),
-            "object".to_string(),
+            "Measurement channel 31".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEF,
-            "Measurement channel 32".to_string(),
-            "object".to_string(),
+            "Measurement channel 32".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Electric water heater (0x026B)
-        let mut obj = self.create_standard_object("Electric water heater".to_string(), 0x02, 0x6B);
+        let mut obj = self.create_standard_object("Electric water heater".to_string(), 0x02, 0x6B);
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "true".to_string(),
-            "Reservation ON".to_string(),
+            "true".to_string(),
+            "Reservation ON".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "false".to_string(),
-            "Reservation OFF".to_string(),
+            "false".to_string(),
+            "Reservation OFF".to_string(),
         ));
         obj.add_standard_property(
             0x90,
-            "ON timer setting".to_string(),
-            "state".to_string(),
+            "ON timer setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x91,
-            "ON timer setting".to_string(),
-            "time".to_string(),
+            "ON timer setting".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB0,
-            "Automatic water heating setting".to_string(),
-            "state".to_string(),
+            "Automatic water heating setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB0,
-            "Automatic water heating setting".to_string(),
-            "state".to_string(),
+            "Automatic water heating setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB1,
-            "Automatic water temperature control setting".to_string(),
-            "state".to_string(),
+            "Automatic water temperature control setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB2,
-            "Water heater status".to_string(),
-            "state".to_string(),
+            "Water heater status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB2,
-            "Water heater status".to_string(),
-            "state".to_string(),
+            "Water heater status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB3,
-            "Water heating temperature setting".to_string(),
-            "".to_string(),
+            "Water heating temperature setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB4,
-            "Manual water heating stop days setting".to_string(),
-            "".to_string(),
+            "Manual water heating stop days setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB5,
-            "Relative time setting value for manual water heating OFF".to_string(),
-            "time".to_string(),
+            "Relative time setting value for manual water heating OFF".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB6,
-            "Tank operation mode setting".to_string(),
-            "state".to_string(),
+            "Tank operation mode setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC0,
-            "Daytime reheating permission setting".to_string(),
-            "state".to_string(),
+            "Daytime reheating permission setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC0,
-            "Daytime reheating permission setting".to_string(),
-            "state".to_string(),
+            "Daytime reheating permission setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC1,
-            "Measured temperature of water in water heater".to_string(),
-            "number".to_string(),
+            "Measured temperature of water in water heater".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC2,
-            "Alarm status".to_string(),
-            "bitmap".to_string(),
+            "Alarm status".to_string(),
+            "bitmap".to_string(),
             4,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC3,
-            "Hot water supply status".to_string(),
-            "state".to_string(),
+            "Hot water supply status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC4,
-            "Relative time setting for keeping bath temperature".to_string(),
-            "time".to_string(),
+            "Relative time setting for keeping bath temperature".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC7,
-            "Participation in energy shift".to_string(),
-            "state".to_string(),
+            "Participation in energy shift".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC8,
-            "Standard time to start heating".to_string(),
-            "number".to_string(),
+            "Standard time to start heating".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC9,
-            "Number of energy shifts".to_string(),
-            "number".to_string(),
+            "Number of energy shifts".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCA,
-            "Daytime heating shift time 1".to_string(),
-            "".to_string(),
+            "Daytime heating shift time 1".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCB,
-            "Expected electric energy at daytime heating shift time 1".to_string(),
-            "object".to_string(),
+            "Expected electric energy at daytime heating shift time 1".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCC,
-            "Consumption of electric energy per hour 1".to_string(),
-            "object".to_string(),
+            "Consumption of electric energy per hour 1".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCD,
-            "Daytime heating shift time 2".to_string(),
-            "".to_string(),
+            "Daytime heating shift time 2".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCE,
-            "Expected electric energy at daytime heating shift time 2".to_string(),
-            "object".to_string(),
+            "Expected electric energy at daytime heating shift time 2".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCF,
-            "Consumption of electric energy per hour 2".to_string(),
-            "object".to_string(),
+            "Consumption of electric energy per hour 2".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD1,
-            "Temperature of supplied water setting".to_string(),
-            "number".to_string(),
+            "Temperature of supplied water setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD3,
-            "Bath water temperature setting".to_string(),
-            "number".to_string(),
+            "Bath water temperature setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD4,
-            "Bath water volume setting4".to_string(),
-            "number".to_string(),
+            "Bath water volume setting4".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD5,
-            "Bath water volume setting4 maximum settable level".to_string(),
-            "number".to_string(),
+            "Bath water volume setting4 maximum settable level".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD6,
-            "Volume setting".to_string(),
-            "number".to_string(),
+            "Volume setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD7,
-            "Mute setting".to_string(),
-            "state".to_string(),
+            "Mute setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD8,
-            "Remaining hot water volume".to_string(),
-            "number".to_string(),
+            "Remaining hot water volume".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD9,
-            "Surplus electric energy power prediction value".to_string(),
-            "object".to_string(),
+            "Surplus electric energy power prediction value".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDB,
-            "Rated power consumption of H/P unit in wintertime".to_string(),
-            "number".to_string(),
+            "Rated power consumption of H/P unit in wintertime".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDC,
-            "Rated power consumption of H/P unit in in-between seasons".to_string(),
-            "number".to_string(),
+            "Rated power consumption of H/P unit in in-between seasons".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDD,
-            "Rated power consumption of H/P unit in summertime".to_string(),
-            "number".to_string(),
+            "Rated power consumption of H/P unit in summertime".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE0,
-            "Bath water volume setting".to_string(),
-            "number".to_string(),
+            "Bath water volume setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE1,
-            "Measured amount of water remaining in tank".to_string(),
-            "number".to_string(),
+            "Measured amount of water remaining in tank".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE2,
-            "Tank capacity".to_string(),
-            "number".to_string(),
+            "Tank capacity".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE3,
-            "Automatic Bath Water Heating Mode Setting".to_string(),
-            "state".to_string(),
+            "Automatic Bath Water Heating Mode Setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required_o"),
-            property_string_to_attribute("required_o"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_o"),
+            property_string_to_attribute("required_o"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE4,
-            "Manual bath reheating operation setting".to_string(),
-            "state".to_string(),
+            "Manual bath reheating operation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE5,
-            "Addition of hot water function setting".to_string(),
-            "state".to_string(),
+            "Addition of hot water function setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE5,
-            "Manual bath hot water addition function setting".to_string(),
-            "state".to_string(),
+            "Manual bath hot water addition function setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE6,
-            "Slight bath water temperature lowering function setting".to_string(),
-            "state".to_string(),
+            "Slight bath water temperature lowering function setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE6,
-            "Manual lukewarm water temperature lowering function setting.".to_string(),
-            "state".to_string(),
+            "Manual lukewarm water temperature lowering function setting.".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE7,
-            "Bath water volume setting 1".to_string(),
-            "number".to_string(),
+            "Bath water volume setting 1".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE8,
-            "Bath water volume setting 2".to_string(),
-            "level".to_string(),
+            "Bath water volume setting 2".to_string(),
+            "level".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE9,
-            "Bathroom priority setting".to_string(),
-            "state".to_string(),
+            "Bathroom priority setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEA,
-            "Bath Operation Status Monitor".to_string(),
-            "state".to_string(),
+            "Bath Operation Status Monitor".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEE,
-            "Bath water volume setting 3".to_string(),
-            "number".to_string(),
+            "Bath water volume setting 3".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // General lighting (0x0290)
-        let mut obj = self.create_standard_object("General lighting".to_string(), 0x02, 0x90);
+        let mut obj = self.create_standard_object("General lighting".to_string(), 0x02, 0x90);
         prop_enums.push(self.create_standard_property_enum(
             0x30,
-            "true".to_string(),
-            "On".to_string(),
+            "true".to_string(),
+            "On".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x31,
-            "false".to_string(),
-            "Off".to_string(),
+            "false".to_string(),
+            "Off".to_string(),
         ));
         obj.add_standard_property(
             0x80,
-            "Operation status".to_string(),
-            "state".to_string(),
+            "Operation status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x90,
-            "ON timer reservation setting".to_string(),
-            "state".to_string(),
+            "ON timer reservation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x91,
-            "ON timer setting".to_string(),
-            "time".to_string(),
+            "ON timer setting".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x94,
-            "OFF timer reservation setting".to_string(),
-            "state".to_string(),
+            "OFF timer reservation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x95,
-            "Time set by OFF timer".to_string(),
-            "time".to_string(),
+            "Time set by OFF timer".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB0,
-            "Light level".to_string(),
-            "number".to_string(),
+            "Light level".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "incandescent".to_string(),
-            "Incandescent lamp color".to_string(),
+            "incandescent".to_string(),
+            "Incandescent lamp color".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "white".to_string(),
-            "White".to_string(),
+            "white".to_string(),
+            "White".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x43,
-            "daylightWhite".to_string(),
-            "Daylight white".to_string(),
+            "daylightWhite".to_string(),
+            "Daylight white".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x44,
-            "daylightColor".to_string(),
-            "Daylight color".to_string(),
+            "daylightColor".to_string(),
+            "Daylight color".to_string(),
         ));
         obj.add_standard_property(
             0xB1,
-            "Light color setting".to_string(),
-            "state".to_string(),
+            "Light color setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "incandescent".to_string(),
-            "Incandescent lamp color".to_string(),
+            "incandescent".to_string(),
+            "Incandescent lamp color".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "white".to_string(),
-            "White".to_string(),
+            "white".to_string(),
+            "White".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x43,
-            "daylightWhite".to_string(),
-            "Daylight white".to_string(),
+            "daylightWhite".to_string(),
+            "Daylight white".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x44,
-            "daylightColor".to_string(),
-            "Daylight color".to_string(),
+            "daylightColor".to_string(),
+            "Daylight color".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x40,
-            "other".to_string(),
-            "Other".to_string(),
+            "other".to_string(),
+            "Other".to_string(),
         ));
         obj.add_standard_property(
             0xB1,
-            "Light color setting".to_string(),
-            "state".to_string(),
+            "Light color setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "incandescent".to_string(),
-            "Incandescent lamp color".to_string(),
+            "incandescent".to_string(),
+            "Incandescent lamp color".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "white".to_string(),
-            "White".to_string(),
+            "white".to_string(),
+            "White".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x43,
-            "daylightWhite".to_string(),
-            "Daylight white".to_string(),
+            "daylightWhite".to_string(),
+            "Daylight white".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x44,
-            "daylightColor".to_string(),
-            "Daylight color".to_string(),
+            "daylightColor".to_string(),
+            "Daylight color".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x40,
-            "other".to_string(),
-            "Other".to_string(),
+            "other".to_string(),
+            "Other".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0xFD,
-            "undefined".to_string(),
-            "Undefined".to_string(),
+            "undefined".to_string(),
+            "Undefined".to_string(),
         ));
         obj.add_standard_property(
             0xB1,
-            "Light color setting".to_string(),
-            "state".to_string(),
+            "Light color setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB2,
-            "Light level step setting".to_string(),
-            "raw".to_string(),
+            "Light level step setting".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB3,
-            "Light color step setting".to_string(),
-            "raw".to_string(),
+            "Light color step setting".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB4,
-            "Maximum specifiable values".to_string(),
-            "object".to_string(),
+            "Maximum specifiable values".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB5,
-            "Maximum value of settable level for night lighting".to_string(),
-            "object".to_string(),
+            "Maximum value of settable level for night lighting".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB6,
-            "Lighting mode setting".to_string(),
-            "state".to_string(),
+            "Lighting mode setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB7,
-            "Light level setting for main lighting".to_string(),
-            "number".to_string(),
+            "Light level setting for main lighting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB8,
-            "Light level step setting for main lighting".to_string(),
-            "raw".to_string(),
+            "Light level step setting for main lighting".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB9,
-            "Light level setting for night lighting".to_string(),
-            "number".to_string(),
+            "Light level setting for night lighting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xBA,
-            "Light level step setting for night lighting".to_string(),
-            "raw".to_string(),
+            "Light level step setting for night lighting".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "incandescent".to_string(),
-            "Incandescent lamp color".to_string(),
+            "incandescent".to_string(),
+            "Incandescent lamp color".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "white".to_string(),
-            "White".to_string(),
+            "white".to_string(),
+            "White".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x43,
-            "daylightWhite".to_string(),
-            "Daylight white".to_string(),
+            "daylightWhite".to_string(),
+            "Daylight white".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x44,
-            "daylightColor".to_string(),
-            "Daylight color".to_string(),
+            "daylightColor".to_string(),
+            "Daylight color".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x40,
-            "other".to_string(),
-            "Other".to_string(),
+            "other".to_string(),
+            "Other".to_string(),
         ));
         obj.add_standard_property(
             0xBB,
-            "Light color setting for main lighting".to_string(),
-            "state".to_string(),
+            "Light color setting for main lighting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xBC,
-            "Light color level step setting for main lighting".to_string(),
-            "raw".to_string(),
+            "Light color level step setting for main lighting".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "incandescent".to_string(),
-            "Incandescent lamp color".to_string(),
+            "incandescent".to_string(),
+            "Incandescent lamp color".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "white".to_string(),
-            "White".to_string(),
+            "white".to_string(),
+            "White".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x43,
-            "daylightWhite".to_string(),
-            "Daylight white".to_string(),
+            "daylightWhite".to_string(),
+            "Daylight white".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x44,
-            "daylightColor".to_string(),
-            "Daylight color".to_string(),
+            "daylightColor".to_string(),
+            "Daylight color".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x40,
-            "other".to_string(),
-            "Other".to_string(),
+            "other".to_string(),
+            "Other".to_string(),
         ));
         obj.add_standard_property(
             0xBD,
-            "Light color setting for night lighting".to_string(),
-            "state".to_string(),
+            "Light color setting for night lighting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xBE,
-            "Light color level step setting for night lighting".to_string(),
-            "raw".to_string(),
+            "Light color level step setting for night lighting".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xBF,
-            "Lighting mode status in auto mode".to_string(),
-            "state".to_string(),
+            "Lighting mode status in auto mode".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC0,
-            "RGB setting for color lighting".to_string(),
-            "object".to_string(),
+            "RGB setting for color lighting".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Storage battery (0x027D)
-        let mut obj = self.create_standard_object("Storage battery".to_string(), 0x02, 0x7D);
+        let mut obj = self.create_standard_object("Storage battery".to_string(), 0x02, 0x7D);
         obj.add_standard_property(
             0x83,
-            "Identification number".to_string(),
-            "raw".to_string(),
+            "Identification number".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x97,
-            "Current time setting".to_string(),
-            "time".to_string(),
+            "Current time setting".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x98,
-            "Current date setting".to_string(),
-            "date".to_string(),
+            "Current date setting".to_string(),
+            "date".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xA0,
-            "AC effective capacity (charging)".to_string(),
-            "number".to_string(),
+            "AC effective capacity (charging)".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xA1,
-            "AC effective capacity (discharging)".to_string(),
-            "number".to_string(),
+            "AC effective capacity (discharging)".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xA2,
-            "AC chargeable capacity".to_string(),
-            "number".to_string(),
+            "AC chargeable capacity".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xA3,
-            "AC dischargeable capacity".to_string(),
-            "number".to_string(),
+            "AC dischargeable capacity".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xA4,
-            "AC chargeable electric energy".to_string(),
-            "number".to_string(),
+            "AC chargeable electric energy".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xA5,
-            "AC dischargeable electric energy".to_string(),
-            "number".to_string(),
+            "AC dischargeable electric energy".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xA6,
-            "AC charge upper limit setting".to_string(),
-            "number".to_string(),
+            "AC charge upper limit setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xA7,
-            "AC discharge lower limit setting".to_string(),
-            "number".to_string(),
+            "AC discharge lower limit setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xA8,
-            "AC measured cumulative charging electric energy".to_string(),
-            "number".to_string(),
+            "AC measured cumulative charging electric energy".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xA9,
-            "AC measured cumulative discharging electric energy".to_string(),
-            "number".to_string(),
+            "AC measured cumulative discharging electric energy".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xAA,
-            "AC charge amount setting value".to_string(),
-            "".to_string(),
+            "AC charge amount setting value".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xAB,
-            "AC discharge amount setting value".to_string(),
-            "".to_string(),
+            "AC discharge amount setting value".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC1,
-            "Charging method".to_string(),
-            "state".to_string(),
+            "Charging method".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC2,
-            "Discharging method".to_string(),
-            "state".to_string(),
+            "Discharging method".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC7,
-            "AC rated electric energy".to_string(),
-            "number".to_string(),
+            "AC rated electric energy".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC8,
-            "Minimum/maximum charging electric power".to_string(),
-            "object".to_string(),
+            "Minimum/maximum charging electric power".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC8,
-            "Minimum/maximum charging electric power".to_string(),
-            "object".to_string(),
+            "Minimum/maximum charging electric power".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC9,
-            "Minimum/maximum discharging electric power".to_string(),
-            "object".to_string(),
+            "Minimum/maximum discharging electric power".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC9,
-            "Minimum/maximum discharging electric power".to_string(),
-            "object".to_string(),
+            "Minimum/maximum discharging electric power".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCA,
-            "Minimum/maximum charging current".to_string(),
-            "object".to_string(),
+            "Minimum/maximum charging current".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCB,
-            "Minimum/maximum discharging current".to_string(),
-            "object".to_string(),
+            "Minimum/maximum discharging current".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCC,
-            "Re-interconnection permission setting".to_string(),
-            "state".to_string(),
+            "Re-interconnection permission setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCD,
-            "Operation permission setting".to_string(),
-            "state".to_string(),
+            "Operation permission setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCE,
-            "Independent operation permission setting".to_string(),
-            "state".to_string(),
+            "Independent operation permission setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCF,
-            "Working operation status".to_string(),
-            "state".to_string(),
+            "Working operation status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCF,
-            "Working operation status".to_string(),
-            "state".to_string(),
+            "Working operation status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD0,
-            "Rated electric energy".to_string(),
-            "number".to_string(),
+            "Rated electric energy".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD1,
-            "Rated capacity".to_string(),
-            "number".to_string(),
+            "Rated capacity".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD2,
-            "Rated voltage".to_string(),
-            "number".to_string(),
+            "Rated voltage".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD3,
-            "Measured instantaneous charging/discharging electric energy".to_string(),
-            "number".to_string(),
+            "Measured instantaneous charging/discharging electric energy".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD4,
-            "Measured instantaneous charging/discharging current".to_string(),
-            "number".to_string(),
+            "Measured instantaneous charging/discharging current".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD5,
-            "Measured instantaneous charging/discharging voltage".to_string(),
-            "number".to_string(),
+            "Measured instantaneous charging/discharging voltage".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD6,
-            "Measured cumulative discharging electric energy".to_string(),
-            "number".to_string(),
+            "Measured cumulative discharging electric energy".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x00,
-            "reset".to_string(),
-            "Reset".to_string(),
+            "reset".to_string(),
+            "Reset".to_string(),
         ));
         obj.add_standard_property(
             0xD7,
-            "Measured cumulative discharging electric energy reset setting".to_string(),
-            "state".to_string(),
+            "Measured cumulative discharging electric energy reset setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD8,
-            "Measured cumulative charging electric energy".to_string(),
-            "number".to_string(),
+            "Measured cumulative charging electric energy".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x00,
-            "reset".to_string(),
-            "Reset".to_string(),
+            "reset".to_string(),
+            "Reset".to_string(),
         ));
         obj.add_standard_property(
             0xD9,
-            "Measured cumulative charging electric energy reset setting".to_string(),
-            "state".to_string(),
+            "Measured cumulative charging electric energy reset setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDA,
-            "Operation mode setting".to_string(),
-            "state".to_string(),
+            "Operation mode setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDA,
-            "Operation mode setting".to_string(),
-            "state".to_string(),
+            "Operation mode setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDA,
-            "Operation mode setting".to_string(),
-            "state".to_string(),
+            "Operation mode setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDA,
-            "Operation mode setting".to_string(),
-            "state".to_string(),
+            "Operation mode setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDB,
-            "System-interconnected type".to_string(),
-            "state".to_string(),
+            "System-interconnected type".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDB,
-            "System-interconnected type".to_string(),
-            "state".to_string(),
+            "System-interconnected type".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDC,
-            "Minimum/maximum charging power (Independent)".to_string(),
-            "object".to_string(),
+            "Minimum/maximum charging power (Independent)".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDD,
-            "Minimum/maximum discharging power (Independent)".to_string(),
-            "object".to_string(),
+            "Minimum/maximum discharging power (Independent)".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDE,
-            "Minimum/maximum charging current (Independent)".to_string(),
-            "object".to_string(),
+            "Minimum/maximum charging current (Independent)".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDF,
-            "Minimum/maximum discharging current (Independent)".to_string(),
-            "object".to_string(),
+            "Minimum/maximum discharging current (Independent)".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE0,
-            "Charging/discharging amount setting 1".to_string(),
-            "".to_string(),
+            "Charging/discharging amount setting 1".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE0,
-            "Charging/discharging amount setting 1".to_string(),
-            "".to_string(),
+            "Charging/discharging amount setting 1".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE1,
-            "Charging/discharging amount setting 2".to_string(),
-            "".to_string(),
+            "Charging/discharging amount setting 2".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE1,
-            "Charging/discharging amount setting 2".to_string(),
-            "".to_string(),
+            "Charging/discharging amount setting 2".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE2,
-            "Remaining stored electricity 1".to_string(),
-            "number".to_string(),
+            "Remaining stored electricity 1".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE3,
-            "Remaining stored electricity 2".to_string(),
-            "number".to_string(),
+            "Remaining stored electricity 2".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE4,
-            "Remaining stored electricity 3".to_string(),
-            "number".to_string(),
+            "Remaining stored electricity 3".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE5,
-            "Battery state of health".to_string(),
-            "number".to_string(),
+            "Battery state of health".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE6,
-            "Battery type".to_string(),
-            "state".to_string(),
+            "Battery type".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE7,
-            "Charging amount setting 1".to_string(),
-            "number".to_string(),
+            "Charging amount setting 1".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE8,
-            "Discharging amount setting 1".to_string(),
-            "number".to_string(),
+            "Discharging amount setting 1".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE9,
-            "Charging amount setting 2".to_string(),
-            "number".to_string(),
+            "Charging amount setting 2".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEA,
-            "Discharging amount setting 2".to_string(),
-            "number".to_string(),
+            "Discharging amount setting 2".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEB,
-            "Charging electric energy setting".to_string(),
-            "number".to_string(),
+            "Charging electric energy setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEC,
-            "Discharging electric energy setting".to_string(),
-            "number".to_string(),
+            "Discharging electric energy setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xED,
-            "Charging current setting".to_string(),
-            "number".to_string(),
+            "Charging current setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEE,
-            "Discharging current setting".to_string(),
-            "number".to_string(),
+            "Discharging current setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEF,
-            "Rated voltage (Independent)".to_string(),
-            "number".to_string(),
+            "Rated voltage (Independent)".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Package-type commercial air conditioner (indoor unit) (except those for facilities) (0x0156)
         let mut obj = self.create_standard_object(
-            "Package-type commercial air conditioner (indoor unit) (except those for facilities)"
+            "Package-type commercial air conditioner (indoor unit) (except those for facilities)"
                 .to_string(),
             0x01,
             0x56,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x30,
-            "true".to_string(),
-            "On".to_string(),
+            "true".to_string(),
+            "On".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x31,
-            "false".to_string(),
-            "Off".to_string(),
+            "false".to_string(),
+            "Off".to_string(),
         ));
         obj.add_standard_property(
             0x80,
-            "Operation status".to_string(),
-            "state".to_string(),
+            "Operation status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xAC,
-            "Thermostat state".to_string(),
-            "state".to_string(),
+            "Thermostat state".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xAE,
-            "Current function (automatic operation mode)".to_string(),
-            "state".to_string(),
+            "Current function (automatic operation mode)".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB0,
-            "Operation mode setting".to_string(),
-            "state".to_string(),
+            "Operation mode setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB3,
-            "Temperature setting".to_string(),
-            "number".to_string(),
+            "Temperature setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xBB,
-            "Measured indoor unit temperature".to_string(),
-            "".to_string(),
+            "Measured indoor unit temperature".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCA,
-            "Group information".to_string(),
-            "".to_string(),
+            "Group information".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDB,
-            "Power consumption range for indoor units".to_string(),
-            "state".to_string(),
+            "Power consumption range for indoor units".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Rice cooker (0x03BB)
-        let mut obj = self.create_standard_object("Rice cooker".to_string(), 0x03, 0xBB);
+        let mut obj = self.create_standard_object("Rice cooker".to_string(), 0x03, 0xBB);
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "on".to_string(),
-            "Reservation on".to_string(),
+            "on".to_string(),
+            "Reservation on".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "off".to_string(),
-            "Reservation off".to_string(),
+            "off".to_string(),
+            "Reservation off".to_string(),
         ));
         obj.add_standard_property(
             0x90,
-            "Rice cooking reservation setting".to_string(),
-            "state".to_string(),
+            "Rice cooking reservation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x91,
-            "Rice cooking reservation time setting".to_string(),
-            "time".to_string(),
+            "Rice cooking reservation time setting".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x92,
-            "Rice cooking reservation relative time setting".to_string(),
-            "time".to_string(),
+            "Rice cooking reservation relative time setting".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB0,
-            "Cover closure status".to_string(),
-            "state".to_string(),
+            "Cover closure status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB1,
-            "Rice cooking status".to_string(),
-            "state".to_string(),
+            "Rice cooking status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB2,
-            "Rice cooking control setting".to_string(),
-            "state".to_string(),
+            "Rice cooking control setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required_o"),
-            property_string_to_attribute("required_o"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_o"),
+            property_string_to_attribute("required_o"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE1,
-            "Warmer setting".to_string(),
-            "state".to_string(),
+            "Warmer setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "true".to_string(),
-            "Removed".to_string(),
+            "true".to_string(),
+            "Removed".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "false".to_string(),
-            "Not removed".to_string(),
+            "false".to_string(),
+            "Not removed".to_string(),
         ));
         obj.add_standard_property(
             0xE5,
-            "Inner pot removal status".to_string(),
-            "state".to_string(),
+            "Inner pot removal status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "true".to_string(),
-            "Removed".to_string(),
+            "true".to_string(),
+            "Removed".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "false".to_string(),
-            "Not removed".to_string(),
+            "false".to_string(),
+            "Not removed".to_string(),
         ));
         obj.add_standard_property(
             0xE6,
-            "Cover removal status".to_string(),
-            "state".to_string(),
+            "Cover removal status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // High-voltage smart electric energy meter (0x028A)
         let mut obj = self.create_standard_object(
-            "High-voltage smart electric energy meter".to_string(),
+            "High-voltage smart electric energy meter".to_string(),
             0x02,
             0x8A,
         );
         obj.add_standard_property(
             0xC1,
-            "Monthly maximum electric power demand".to_string(),
-            "".to_string(),
+            "Monthly maximum electric power demand".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC2,
-            "Cumulative maximum electric power demand".to_string(),
-            "number".to_string(),
+            "Cumulative maximum electric power demand".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC3,
-            "Electric power demand at fixed time (30-minute average electric power)".to_string(),
-            "object".to_string(),
+            "Electric power demand at fixed time (30-minute average electric power)".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC4,
-            "Number of effective digits of electric power demand".to_string(),
-            "number".to_string(),
+            "Number of effective digits of electric power demand".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC5,
-            "Unit of electric power demand".to_string(),
-            "numericValue".to_string(),
+            "Unit of electric power demand".to_string(),
+            "numericValue".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC6,
-            "Historical data of measured electric power demand".to_string(),
-            "object".to_string(),
+            "Historical data of measured electric power demand".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC7,
-            "Unit of cumulative maximum electric power demand".to_string(),
-            "numericValue".to_string(),
+            "Unit of cumulative maximum electric power demand".to_string(),
+            "numericValue".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
-        obj.add_standard_property(0xCA, "Measurement data of reactive electric power consumption (lag) for power factor measurement".to_string(), "object".to_string(), 0, property_string_to_attribute("optional"), property_string_to_attribute("notApplicable"), property_string_to_attribute("optional"), &mut prop_enums);
-        obj.add_standard_property(0xCB, "Measurement data of cumulative amount of reactive electric power consumption (lag) at fixed time for power factor measurement".to_string(), "object".to_string(), 0, property_string_to_attribute("optional"), property_string_to_attribute("notApplicable"), property_string_to_attribute("optional"), &mut prop_enums);
-        obj.add_standard_property(0xCC, "Number of effective digits for measurement data of cumulative amount of reactive electric power consumption (lag) for power factor measurement".to_string(), "number".to_string(), 0, property_string_to_attribute("optional"), property_string_to_attribute("notApplicable"), property_string_to_attribute("optional"), &mut prop_enums);
-        obj.add_standard_property(0xCD, "Unit of measurement data of cumulative amount of reactive electric power consumption (lag)".to_string(), "numericValue".to_string(), 1, property_string_to_attribute("optional"), property_string_to_attribute("notApplicable"), property_string_to_attribute("optional"), &mut prop_enums);
-        obj.add_standard_property(0xCE, "Historical data of measurement data of cumulative amount of reactive electric power consumption (lag) for power factor measurement".to_string(), "object".to_string(), 0, property_string_to_attribute("optional"), property_string_to_attribute("notApplicable"), property_string_to_attribute("optional"), &mut prop_enums);
+        obj.add_standard_property(0xCA, "Measurement data of reactive electric power consumption (lag) for power factor measurement".to_string(), "object".to_string(), 0, property_string_to_attribute("optional"), property_string_to_attribute("notApplicable"), property_string_to_attribute("optional"), &mut prop_enums);
+        obj.add_standard_property(0xCB, "Measurement data of cumulative amount of reactive electric power consumption (lag) at fixed time for power factor measurement".to_string(), "object".to_string(), 0, property_string_to_attribute("optional"), property_string_to_attribute("notApplicable"), property_string_to_attribute("optional"), &mut prop_enums);
+        obj.add_standard_property(0xCC, "Number of effective digits for measurement data of cumulative amount of reactive electric power consumption (lag) for power factor measurement".to_string(), "number".to_string(), 0, property_string_to_attribute("optional"), property_string_to_attribute("notApplicable"), property_string_to_attribute("optional"), &mut prop_enums);
+        obj.add_standard_property(0xCD, "Unit of measurement data of cumulative amount of reactive electric power consumption (lag)".to_string(), "numericValue".to_string(), 1, property_string_to_attribute("optional"), property_string_to_attribute("notApplicable"), property_string_to_attribute("optional"), &mut prop_enums);
+        obj.add_standard_property(0xCE, "Historical data of measurement data of cumulative amount of reactive electric power consumption (lag) for power factor measurement".to_string(), "object".to_string(), 0, property_string_to_attribute("optional"), property_string_to_attribute("notApplicable"), property_string_to_attribute("optional"), &mut prop_enums);
         obj.add_standard_property(
             0xD3,
-            "Coefficient".to_string(),
-            "number".to_string(),
+            "Coefficient".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD4,
-            "Multiplying factor for coefficient".to_string(),
-            "numericValue".to_string(),
+            "Multiplying factor for coefficient".to_string(),
+            "numericValue".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE0,
-            "Fixed date".to_string(),
-            "number".to_string(),
+            "Fixed date".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
-        obj.add_standard_property(0xE1, "Day for which the historical data of measured cumulative amounts of electric energy is to be retrieved".to_string(), "".to_string(), 0, property_string_to_attribute("required"), property_string_to_attribute("required"), property_string_to_attribute("optional"), &mut prop_enums);
+        obj.add_standard_property(0xE1, "Day for which the historical data of measured cumulative amounts of electric energy is to be retrieved".to_string(), "".to_string(), 0, property_string_to_attribute("required"), property_string_to_attribute("required"), property_string_to_attribute("optional"), &mut prop_enums);
         obj.add_standard_property(
             0xE2,
-            "Measured cumulative amounts of active electric energy".to_string(),
-            "object".to_string(),
+            "Measured cumulative amounts of active electric energy".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE3,
-            "Cumulative amounts of active electric energy at fixed time".to_string(),
-            "object".to_string(),
+            "Cumulative amounts of active electric energy at fixed time".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
-        obj.add_standard_property(0xE4, "Measurement data of cumulative amounts of active electric energy for power factor measurement".to_string(), "object".to_string(), 0, property_string_to_attribute("optional"), property_string_to_attribute("notApplicable"), property_string_to_attribute("optional"), &mut prop_enums);
+        obj.add_standard_property(0xE4, "Measurement data of cumulative amounts of active electric energy for power factor measurement".to_string(), "object".to_string(), 0, property_string_to_attribute("optional"), property_string_to_attribute("notApplicable"), property_string_to_attribute("optional"), &mut prop_enums);
         obj.add_standard_property(
             0xE5,
-            "Number of effective digits for cumulative amount of active electric energy"
+            "Number of effective digits for cumulative amount of active electric energy"
                 .to_string(),
-            "number".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE6,
-            "Unit of cumulative amounts of effective electric energy".to_string(),
-            "numericValue".to_string(),
+            "Unit of cumulative amounts of effective electric energy".to_string(),
+            "numericValue".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE7,
-            "Historical data of measured cumulative amount of active electric energy".to_string(),
-            "object".to_string(),
+            "Historical data of measured cumulative amount of active electric energy".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Cooking heater (0x03B9)
-        let mut obj = self.create_standard_object("Cooking heater".to_string(), 0x03, 0xB9);
+        let mut obj = self.create_standard_object("Cooking heater".to_string(), 0x03, 0xB9);
         obj.add_standard_property(
             0x96,
-            "Relative time settings of off timers".to_string(),
-            "object".to_string(),
+            "Relative time settings of off timers".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xA1,
-            "Child lock setting".to_string(),
-            "state".to_string(),
+            "Child lock setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xA2,
-            "Radiant heater lock setting".to_string(),
-            "state".to_string(),
+            "Radiant heater lock setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB1,
-            "Heating status".to_string(),
-            "object".to_string(),
+            "Heating status".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB2,
-            "Heating setting".to_string(),
-            "object".to_string(),
+            "Heating setting".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB3,
-            "All stop setting".to_string(),
-            "state".to_string(),
+            "All stop setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required_o"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required_o"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE0,
-            "Heating modes of stoves".to_string(),
-            "object".to_string(),
+            "Heating modes of stoves".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE3,
-            "Heating temperature setting".to_string(),
-            "object".to_string(),
+            "Heating temperature setting".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE7,
-            "Heating power setting".to_string(),
-            "object".to_string(),
+            "Heating power setting".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // VOC sensor (0x001D)
-        let mut obj = self.create_standard_object("VOC sensor".to_string(), 0x00, 0x1D);
+        let mut obj = self.create_standard_object("VOC sensor".to_string(), 0x00, 0x1D);
         obj.add_standard_property(
             0xB0,
-            "Detection threshold level".to_string(),
-            "level".to_string(),
+            "Detection threshold level".to_string(),
+            "level".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "true".to_string(),
-            "Detected".to_string(),
+            "true".to_string(),
+            "Detected".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "false".to_string(),
-            "Not detected".to_string(),
+            "false".to_string(),
+            "Not detected".to_string(),
         ));
         obj.add_standard_property(
             0xB1,
-            "VOC detection status".to_string(),
-            "state".to_string(),
+            "VOC detection status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE0,
-            "Measured value of VOC concentration".to_string(),
-            "number".to_string(),
+            "Measured value of VOC concentration".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Bathroom heater dryer (0x0273)
-        let mut obj = self.create_standard_object("Bathroom heater dryer".to_string(), 0x02, 0x73);
+        let mut obj = self.create_standard_object("Bathroom heater dryer".to_string(), 0x02, 0x73);
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "true".to_string(),
-            "Reservation on".to_string(),
+            "true".to_string(),
+            "Reservation on".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "false".to_string(),
-            "Reservation off".to_string(),
+            "false".to_string(),
+            "Reservation off".to_string(),
         ));
         obj.add_standard_property(
             0x90,
-            "On timer reservation setting 1".to_string(),
-            "state".to_string(),
+            "On timer reservation setting 1".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x91,
-            "On timer setting value".to_string(),
-            "time".to_string(),
+            "On timer setting value".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x92,
-            "On relative timer setting value".to_string(),
-            "time".to_string(),
+            "On relative timer setting value".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "true".to_string(),
-            "Reservation on".to_string(),
+            "true".to_string(),
+            "Reservation on".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "false".to_string(),
-            "Reservation off".to_string(),
+            "false".to_string(),
+            "Reservation off".to_string(),
         ));
         obj.add_standard_property(
             0x94,
-            "Off timer reservation setting".to_string(),
-            "state".to_string(),
+            "Off timer reservation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x95,
-            "OFF timer setting value".to_string(),
-            "time".to_string(),
+            "OFF timer setting value".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x96,
-            "Off relative timer setting value".to_string(),
-            "time".to_string(),
+            "Off relative timer setting value".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB0,
-            "Operation setting".to_string(),
-            "state".to_string(),
+            "Operation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB0,
-            "Operation setting".to_string(),
-            "state".to_string(),
+            "Operation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB1,
-            "Ventilation operation setting".to_string(),
-            "".to_string(),
+            "Ventilation operation setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB2,
-            "Bathroom prewarming operation setting".to_string(),
-            "".to_string(),
+            "Bathroom prewarming operation setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB2,
-            "Bathroom prewarming operation setting".to_string(),
-            "".to_string(),
+            "Bathroom prewarming operation setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB3,
-            "Bathroom heating operation setting".to_string(),
-            "".to_string(),
+            "Bathroom heating operation setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB4,
-            "Bathroom drying operation setting".to_string(),
-            "".to_string(),
+            "Bathroom drying operation setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB5,
-            "Cool air circulation operation setting".to_string(),
-            "".to_string(),
+            "Cool air circulation operation setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB6,
-            "Mist sauna operation setting".to_string(),
-            "".to_string(),
+            "Mist sauna operation setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB7,
-            "Water mist operation setting".to_string(),
-            "".to_string(),
+            "Water mist operation setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xBA,
-            "Measured value of bathroom relative humidity".to_string(),
-            "number".to_string(),
+            "Measured value of bathroom relative humidity".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xBB,
-            "Measured value of bathroom temperature".to_string(),
-            "number".to_string(),
+            "Measured value of bathroom temperature".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC2,
-            "Ventilation air flow rate setting".to_string(),
-            "".to_string(),
+            "Ventilation air flow rate setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCF,
-            "Filter cleaning reminder sign setting".to_string(),
-            "state".to_string(),
+            "Filter cleaning reminder sign setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE0,
-            "Human body detection status".to_string(),
-            "state".to_string(),
+            "Human body detection status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE1,
-            "On timer reservation setting 2".to_string(),
-            "state".to_string(),
+            "On timer reservation setting 2".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE1,
-            "On timer reservation setting 2".to_string(),
-            "state".to_string(),
+            "On timer reservation setting 2".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Commercial show case outdoor unit (0x03D4)
         let mut obj = self.create_standard_object(
-            "Commercial show case outdoor unit".to_string(),
+            "Commercial show case outdoor unit".to_string(),
             0x03,
             0xD4,
         );
         obj.add_standard_property(
             0xAA,
-            "Indicates that the showcase freezer is in an exceptional status.".to_string(),
-            "state".to_string(),
+            "Indicates that the showcase freezer is in an exceptional status.".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB0,
-            "Operation mode setting".to_string(),
-            "state".to_string(),
+            "Operation mode setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB0,
-            "Operation mode setting".to_string(),
-            "state".to_string(),
+            "Operation mode setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xBE,
-            "Used to acquire measurements of outdoor air temperature.".to_string(),
-            "number".to_string(),
+            "Used to acquire measurements of outdoor air temperature.".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCA,
-            "Group information".to_string(),
-            "raw".to_string(),
+            "Group information".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCA,
-            "Group information".to_string(),
-            "".to_string(),
+            "Group information".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x30,
-            "true".to_string(),
-            "ON".to_string(),
+            "true".to_string(),
+            "ON".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x31,
-            "false".to_string(),
-            "OFF".to_string(),
+            "false".to_string(),
+            "OFF".to_string(),
         ));
         obj.add_standard_property(
             0xE2,
-            "Indicates compressor ON/OFF status.".to_string(),
-            "state".to_string(),
+            "Indicates compressor ON/OFF status.".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Fuel cell (0x027C)
-        let mut obj = self.create_standard_object("Fuel cell".to_string(), 0x02, 0x7C);
+        let mut obj = self.create_standard_object("Fuel cell".to_string(), 0x02, 0x7C);
         obj.add_standard_property(
             0xC1,
-            "Measured temperature of water in water heater".to_string(),
-            "number".to_string(),
+            "Measured temperature of water in water heater".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC2,
-            "Rated power generation output".to_string(),
-            "number".to_string(),
+            "Rated power generation output".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC2,
-            "Rated power generation output".to_string(),
-            "number".to_string(),
+            "Rated power generation output".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC3,
-            "Heating value of hot water storage tank".to_string(),
-            "number".to_string(),
+            "Heating value of hot water storage tank".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC4,
-            "Measured instantaneous power generation output".to_string(),
-            "number".to_string(),
+            "Measured instantaneous power generation output".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC5,
-            "Measured cumulative power generation output".to_string(),
-            "number".to_string(),
+            "Measured cumulative power generation output".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x00,
-            "reset".to_string(),
-            "Reset".to_string(),
+            "reset".to_string(),
+            "Reset".to_string(),
         ));
         obj.add_standard_property(
             0xC6,
-            "Cumulative power generation output reset setting".to_string(),
-            "state".to_string(),
+            "Cumulative power generation output reset setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x00,
-            "reset".to_string(),
-            "Reset".to_string(),
+            "reset".to_string(),
+            "Reset".to_string(),
         ));
         obj.add_standard_property(
             0xC6,
-            "Cumulative energy generation output reset setting".to_string(),
-            "state".to_string(),
+            "Cumulative energy generation output reset setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC7,
-            "Measured instantaneous gas consumption".to_string(),
-            "number".to_string(),
+            "Measured instantaneous gas consumption".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC8,
-            "Measured cumulative gas consumption".to_string(),
-            "number".to_string(),
+            "Measured cumulative gas consumption".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x00,
-            "reset".to_string(),
-            "Reset".to_string(),
+            "reset".to_string(),
+            "Reset".to_string(),
         ));
         obj.add_standard_property(
             0xC9,
-            "Cumulative gas consumption reset setting".to_string(),
-            "state".to_string(),
+            "Cumulative gas consumption reset setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCA,
-            "Power generation setting".to_string(),
-            "state".to_string(),
+            "Power generation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCA,
-            "Power generation setting".to_string(),
-            "state".to_string(),
+            "Power generation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCB,
-            "Power generation status".to_string(),
-            "state".to_string(),
+            "Power generation status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCB,
-            "Power generation status".to_string(),
-            "state".to_string(),
+            "Power generation status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCC,
-            "Measured in-house instantaneous power consumption".to_string(),
-            "number".to_string(),
+            "Measured in-house instantaneous power consumption".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCD,
-            "Measured in-house cumulative power consumption".to_string(),
-            "number".to_string(),
+            "Measured in-house cumulative power consumption".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCD,
-            "Measured in-house cumulative energy consumption".to_string(),
-            "number".to_string(),
+            "Measured in-house cumulative energy consumption".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x00,
-            "reset".to_string(),
-            "Reset".to_string(),
+            "reset".to_string(),
+            "Reset".to_string(),
         ));
         obj.add_standard_property(
             0xCE,
-            "In-house cumulative power consumption reset".to_string(),
-            "state".to_string(),
+            "In-house cumulative power consumption reset".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x00,
-            "reset".to_string(),
-            "Reset".to_string(),
+            "reset".to_string(),
+            "Reset".to_string(),
         ));
         obj.add_standard_property(
             0xCE,
-            "In-house cumulative energy consumption reset".to_string(),
-            "state".to_string(),
+            "In-house cumulative energy consumption reset".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD0,
-            "System interconnected type".to_string(),
-            "state".to_string(),
+            "System interconnected type".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD0,
-            "System interconnected type".to_string(),
-            "state".to_string(),
+            "System interconnected type".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD1,
-            "Power generation request time setting".to_string(),
-            "".to_string(),
+            "Power generation request time setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD2,
-            "Designated power generation status".to_string(),
-            "state".to_string(),
+            "Designated power generation status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE1,
-            "Measured remaining hot water amount".to_string(),
-            "number".to_string(),
+            "Measured remaining hot water amount".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE2,
-            "Tank capacity".to_string(),
-            "number".to_string(),
+            "Tank capacity".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Water flowmeter (0x0281)
-        let mut obj = self.create_standard_object("Water flowmeter".to_string(), 0x02, 0x81);
+        let mut obj = self.create_standard_object("Water flowmeter".to_string(), 0x02, 0x81);
         obj.add_standard_property(
             0xD0,
-            "Water flowmeter classification".to_string(),
-            "state".to_string(),
+            "Water flowmeter classification".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD1,
-            "Owner classification".to_string(),
-            "state".to_string(),
+            "Owner classification".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE0,
-            "Measured cumulative amount of flowing water".to_string(),
-            "number".to_string(),
+            "Measured cumulative amount of flowing water".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE1,
-            "Unit for measured Cumulative amounts of flowing water".to_string(),
-            "numericValue".to_string(),
+            "Unit for measured Cumulative amounts of flowing water".to_string(),
+            "numericValue".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE2,
-            "Historical data of measured cumulative amount of flowing water".to_string(),
-            "array".to_string(),
+            "Historical data of measured cumulative amount of flowing water".to_string(),
+            "array".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "true".to_string(),
-            "Detected".to_string(),
+            "true".to_string(),
+            "Detected".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "false".to_string(),
-            "Not detected".to_string(),
+            "false".to_string(),
+            "Not detected".to_string(),
         ));
         obj.add_standard_property(
             0xE3,
-            "Detection of abnormal value in metering data".to_string(),
-            "state".to_string(),
+            "Detection of abnormal value in metering data".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE4,
-            "Security data information".to_string(),
-            "number".to_string(),
+            "Security data information".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE5,
-            "ID number setting".to_string(),
-            "raw".to_string(),
+            "ID number setting".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE6,
-            "Verification expiration information".to_string(),
-            "raw".to_string(),
+            "Verification expiration information".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE7,
-            "Historical data 2 of measured cumulative amount of flowing water".to_string(),
-            "array".to_string(),
+            "Historical data 2 of measured cumulative amount of flowing water".to_string(),
+            "array".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Home air conditioner (0x0130)
-        let mut obj = self.create_standard_object("Home air conditioner".to_string(), 0x01, 0x30);
+        let mut obj = self.create_standard_object("Home air conditioner".to_string(), 0x01, 0x30);
         prop_enums.push(self.create_standard_property_enum(
             0x30,
-            "true".to_string(),
-            "On".to_string(),
+            "true".to_string(),
+            "On".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x31,
-            "false".to_string(),
-            "Off".to_string(),
+            "false".to_string(),
+            "Off".to_string(),
         ));
         obj.add_standard_property(
             0x80,
-            "Operation status".to_string(),
-            "state".to_string(),
+            "Operation status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x8F,
-            "Power-saving operation setting".to_string(),
-            "state".to_string(),
+            "Power-saving operation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x90,
-            "ON timer-based reservation setting".to_string(),
-            "state".to_string(),
+            "ON timer-based reservation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x91,
-            "ON timer setting (time)".to_string(),
-            "time".to_string(),
+            "ON timer setting (time)".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x92,
-            "ON timer setting (relative time)".to_string(),
-            "time".to_string(),
+            "ON timer setting (relative time)".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x94,
-            "OFF timer-based reservation setting".to_string(),
-            "state".to_string(),
+            "OFF timer-based reservation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x95,
-            "OFF timer setting (time)".to_string(),
-            "time".to_string(),
+            "OFF timer setting (time)".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x96,
-            "OFF timer setting (relative time)".to_string(),
-            "time".to_string(),
+            "OFF timer setting (relative time)".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xA0,
-            "Air flow rate setting".to_string(),
-            "".to_string(),
+            "Air flow rate setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xA0,
-            "Air flow rate setting".to_string(),
-            "".to_string(),
+            "Air flow rate setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xA1,
-            "Automatic control of air flow direction setting".to_string(),
-            "state".to_string(),
+            "Automatic control of air flow direction setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xA3,
-            "Automatic swing of air flow setting".to_string(),
-            "state".to_string(),
+            "Automatic swing of air flow setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xA4,
-            "Air flow direction (vertical) setting".to_string(),
-            "state".to_string(),
+            "Air flow direction (vertical) setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xA5,
-            "Air flow direction (horizontal) setting".to_string(),
-            "state".to_string(),
+            "Air flow direction (horizontal) setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xAA,
-            "Special state".to_string(),
-            "state".to_string(),
+            "Special state".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xAB,
-            "Non-priority state".to_string(),
-            "state".to_string(),
+            "Non-priority state".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB0,
-            "Operation mode setting".to_string(),
-            "state".to_string(),
+            "Operation mode setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB1,
-            "Automatic temperature control setting".to_string(),
-            "state".to_string(),
+            "Automatic temperature control setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB2,
-            "Normal/highspeed/silent operation setting".to_string(),
-            "state".to_string(),
+            "Normal/highspeed/silent operation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB3,
-            "Set temperature value".to_string(),
-            "".to_string(),
+            "Set temperature value".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB4,
-            "Set value of relative humidity in dehumidifying mode".to_string(),
-            "number".to_string(),
+            "Set value of relative humidity in dehumidifying mode".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB5,
-            "Set temperature value in cooling mode".to_string(),
-            "".to_string(),
+            "Set temperature value in cooling mode".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB6,
-            "Set temperature value in heating mode".to_string(),
-            "".to_string(),
+            "Set temperature value in heating mode".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB7,
-            "Set temperature value in dehumidifying mode".to_string(),
-            "".to_string(),
+            "Set temperature value in dehumidifying mode".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB8,
-            "Rated power consumption".to_string(),
-            "object".to_string(),
+            "Rated power consumption".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB9,
-            "Measured value of current consumption".to_string(),
-            "number".to_string(),
+            "Measured value of current consumption".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xBA,
-            "Measured value of room relative humidity".to_string(),
-            "".to_string(),
+            "Measured value of room relative humidity".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xBB,
-            "Measured value of room temperature".to_string(),
-            "".to_string(),
+            "Measured value of room temperature".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xBB,
-            "Measured value of room temperature".to_string(),
-            "".to_string(),
+            "Measured value of room temperature".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xBC,
-            "Set temperature value of user remote control".to_string(),
-            "number".to_string(),
+            "Set temperature value of user remote control".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xBD,
-            "Measured cooled air temperature".to_string(),
-            "".to_string(),
+            "Measured cooled air temperature".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xBE,
-            "Measured outdoor air temperature".to_string(),
-            "".to_string(),
+            "Measured outdoor air temperature".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xBF,
-            "Relative temperature setting".to_string(),
-            "".to_string(),
+            "Relative temperature setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC0,
-            "Ventilation function setting".to_string(),
-            "state".to_string(),
+            "Ventilation function setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC1,
-            "Humidifier function setting".to_string(),
-            "state".to_string(),
+            "Humidifier function setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC2,
-            "Ventilation air flow rate setting".to_string(),
-            "".to_string(),
+            "Ventilation air flow rate setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC4,
-            "Degree of humidification setting".to_string(),
-            "".to_string(),
+            "Degree of humidification setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC6,
-            "Mounted air cleaning method".to_string(),
-            "bitmap".to_string(),
+            "Mounted air cleaning method".to_string(),
+            "bitmap".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC7,
-            "Air purifier function setting".to_string(),
-            "bitmap".to_string(),
+            "Air purifier function setting".to_string(),
+            "bitmap".to_string(),
             8,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC8,
-            "Mounted air refresh method".to_string(),
-            "bitmap".to_string(),
+            "Mounted air refresh method".to_string(),
+            "bitmap".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC9,
-            "Air refresher function setting".to_string(),
-            "bitmap".to_string(),
+            "Air refresher function setting".to_string(),
+            "bitmap".to_string(),
             8,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCA,
-            "Mounted self-cleaning method".to_string(),
-            "bitmap".to_string(),
+            "Mounted self-cleaning method".to_string(),
+            "bitmap".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCB,
-            "Self-cleaning function setting".to_string(),
-            "bitmap".to_string(),
+            "Self-cleaning function setting".to_string(),
+            "bitmap".to_string(),
             8,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCC,
-            "Special function setting".to_string(),
-            "state".to_string(),
+            "Special function setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCD,
-            "Operation status of components".to_string(),
-            "bitmap".to_string(),
+            "Operation status of components".to_string(),
+            "bitmap".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCE,
-            "Thermostat setting override function".to_string(),
-            "state".to_string(),
+            "Thermostat setting override function".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCE,
-            "Thermostat setting override function".to_string(),
-            "state".to_string(),
+            "Thermostat setting override function".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCF,
-            "Air purification mode setting".to_string(),
-            "state".to_string(),
+            "Air purification mode setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD0,
-            "Buzzer".to_string(),
-            "state".to_string(),
+            "Buzzer".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Electric energy sensor (0x0022)
-        let mut obj = self.create_standard_object("Electric energy sensor".to_string(), 0x00, 0x22);
+        let mut obj = self.create_standard_object("Electric energy sensor".to_string(), 0x00, 0x22);
         obj.add_standard_property(
             0xE0,
-            "Cumulative amounts of electric energy".to_string(),
-            "number".to_string(),
+            "Cumulative amounts of electric energy".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE1,
-            "Medium-capacity sensor instantaneous electric energy".to_string(),
-            "number".to_string(),
+            "Medium-capacity sensor instantaneous electric energy".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE2,
-            "Small-capacity sensor instantaneous electric energy".to_string(),
-            "number".to_string(),
+            "Small-capacity sensor instantaneous electric energy".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE3,
-            "Large-capacity sensor instantaneous electric energy".to_string(),
-            "number".to_string(),
+            "Large-capacity sensor instantaneous electric energy".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE4,
-            "Cumulative amounts of electric energy measurement log".to_string(),
-            "array".to_string(),
+            "Cumulative amounts of electric energy measurement log".to_string(),
+            "array".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE4,
-            "Cumulative amounts of electric energy measurement log".to_string(),
-            "array".to_string(),
+            "Cumulative amounts of electric energy measurement log".to_string(),
+            "array".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE5,
-            "Effective voltage value".to_string(),
-            "number".to_string(),
+            "Effective voltage value".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Washer and dryer (0x03D3)
-        let mut obj = self.create_standard_object("Washer and dryer".to_string(), 0x03, 0xD3);
+        let mut obj = self.create_standard_object("Washer and dryer".to_string(), 0x03, 0xD3);
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "enable".to_string(),
-            "Reservation on".to_string(),
+            "enable".to_string(),
+            "Reservation on".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "disable".to_string(),
-            "Reservation off".to_string(),
+            "disable".to_string(),
+            "Reservation off".to_string(),
         ));
         obj.add_standard_property(
             0x90,
-            "On timer reservation setting".to_string(),
-            "state".to_string(),
+            "On timer reservation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x91,
-            "On timer setting".to_string(),
-            "time".to_string(),
+            "On timer setting".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x92,
-            "Relative time-based on timer setting".to_string(),
-            "time".to_string(),
+            "Relative time-based on timer setting".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "open".to_string(),
-            "Door/cover open".to_string(),
+            "open".to_string(),
+            "Door/cover open".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "close".to_string(),
-            "Door/cover closed".to_string(),
+            "close".to_string(),
+            "Door/cover closed".to_string(),
         ));
         obj.add_standard_property(
             0xB0,
-            "Door/cover open/close status".to_string(),
-            "state".to_string(),
+            "Door/cover open/close status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB2,
-            "Washer and dryer setting".to_string(),
-            "state".to_string(),
+            "Washer and dryer setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD0,
-            "Washer and dryer cycle setting 1".to_string(),
-            "state".to_string(),
+            "Washer and dryer cycle setting 1".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD1,
-            "Washer and dryer cycle setting 2".to_string(),
-            "state".to_string(),
+            "Washer and dryer cycle setting 2".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD2,
-            "Drying cycle setting".to_string(),
-            "state".to_string(),
+            "Drying cycle setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD3,
-            "Washer and dryer cycle option list 1".to_string(),
-            "raw".to_string(),
+            "Washer and dryer cycle option list 1".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD4,
-            "Washer and dryer cycle option list 2".to_string(),
-            "raw".to_string(),
+            "Washer and dryer cycle option list 2".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD5,
-            "Washer and dryer cycle option list 3".to_string(),
-            "raw".to_string(),
+            "Washer and dryer cycle option list 3".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD6,
-            "Water flow rate setting".to_string(),
-            "".to_string(),
+            "Water flow rate setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD7,
-            "Rotation speed for spin drying setting".to_string(),
-            "".to_string(),
+            "Rotation speed for spin drying setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD8,
-            "Degree of drying setting".to_string(),
-            "".to_string(),
+            "Degree of drying setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDB,
-            "Remaining washing time".to_string(),
-            "".to_string(),
+            "Remaining washing time".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDC,
-            "Remaining drying time".to_string(),
-            "".to_string(),
+            "Remaining drying time".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDF,
-            "Elapsed time on the ON timer".to_string(),
-            "time".to_string(),
+            "Elapsed time on the ON timer".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE1,
-            "Presoaking time setting".to_string(),
-            "".to_string(),
+            "Presoaking time setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE2,
-            "Current stage of washer and dryer cycle".to_string(),
-            "state".to_string(),
+            "Current stage of washer and dryer cycle".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE3,
-            "Water volume setting 1".to_string(),
-            "".to_string(),
+            "Water volume setting 1".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE4,
-            "Water volume setting 2".to_string(),
-            "".to_string(),
+            "Water volume setting 2".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE5,
-            "Washing time setting".to_string(),
-            "".to_string(),
+            "Washing time setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE6,
-            "Number of times of rinsing setting".to_string(),
-            "".to_string(),
+            "Number of times of rinsing setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE7,
-            "Rinsing process setting".to_string(),
-            "raw".to_string(),
+            "Rinsing process setting".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE8,
-            "Spin drying time setting".to_string(),
-            "".to_string(),
+            "Spin drying time setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE9,
-            "Drying time setting".to_string(),
-            "".to_string(),
+            "Drying time setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEA,
-            "Warm water setting".to_string(),
-            "".to_string(),
+            "Warm water setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEB,
-            "Bathtub water recycle setting".to_string(),
-            "state".to_string(),
+            "Bathtub water recycle setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEC,
-            "Wrinkling minimization setting".to_string(),
-            "state".to_string(),
+            "Wrinkling minimization setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xED,
-            "Time remaining to complete washer and dryer cycle".to_string(),
-            "".to_string(),
+            "Time remaining to complete washer and dryer cycle".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "true".to_string(),
-            "Locked".to_string(),
+            "true".to_string(),
+            "Locked".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "false".to_string(),
-            "Unlocked".to_string(),
+            "false".to_string(),
+            "Unlocked".to_string(),
         ));
         obj.add_standard_property(
             0xEE,
-            "Door/cover lock setting".to_string(),
-            "state".to_string(),
+            "Door/cover lock setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEF,
-            "Washer and dryer cycle".to_string(),
-            "raw".to_string(),
+            "Washer and dryer cycle".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Electrically operated rain sliding door/shutter (0x0263)
         let mut obj = self.create_standard_object(
-            "Electrically operated rain sliding door/shutter".to_string(),
+            "Electrically operated rain sliding door/shutter".to_string(),
             0x02,
             0x63,
         );
         obj.add_standard_property(
             0x89,
-            "Fault description (Recoverable faults)".to_string(),
-            "state".to_string(),
+            "Fault description (Recoverable faults)".to_string(),
+            "state".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "true".to_string(),
-            "ON".to_string(),
+            "true".to_string(),
+            "ON".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "false".to_string(),
-            "OFF".to_string(),
+            "false".to_string(),
+            "OFF".to_string(),
         ));
         obj.add_standard_property(
             0x90,
-            "Timer operation setting".to_string(),
-            "state".to_string(),
+            "Timer operation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD0,
-            "Opening speed setting".to_string(),
-            "state".to_string(),
+            "Opening speed setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD1,
-            "Closing speed setting".to_string(),
-            "state".to_string(),
+            "Closing speed setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD2,
-            "Operation time".to_string(),
-            "number".to_string(),
+            "Operation time".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE0,
-            "Open/close operation setting".to_string(),
-            "state".to_string(),
+            "Open/close operation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE1,
-            "Degree-of-opening setting".to_string(),
-            "number".to_string(),
+            "Degree-of-opening setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE2,
-            "Blind angle setting".to_string(),
-            "number".to_string(),
+            "Blind angle setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "low".to_string(),
-            "Low".to_string(),
+            "low".to_string(),
+            "Low".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "medium".to_string(),
-            "Medium".to_string(),
+            "medium".to_string(),
+            "Medium".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x43,
-            "high".to_string(),
-            "High".to_string(),
+            "high".to_string(),
+            "High".to_string(),
         ));
         obj.add_standard_property(
             0xE3,
-            "Opening/closing speed setting".to_string(),
-            "state".to_string(),
+            "Opening/closing speed setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "true".to_string(),
-            "Lock".to_string(),
+            "true".to_string(),
+            "Lock".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "false".to_string(),
-            "Unlock".to_string(),
+            "false".to_string(),
+            "Unlock".to_string(),
         ));
         obj.add_standard_property(
             0xE5,
-            "Electric lock setting".to_string(),
-            "state".to_string(),
+            "Electric lock setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE8,
-            "Remote operation setting status".to_string(),
-            "state".to_string(),
+            "Remote operation setting status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE9,
-            "Selective degree-of-opening setting".to_string(),
-            "state".to_string(),
+            "Selective degree-of-opening setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEA,
-            "Open/closed status".to_string(),
-            "state".to_string(),
+            "Open/closed status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xED,
-            "Slit degree-of-opening".to_string(),
-            "level".to_string(),
+            "Slit degree-of-opening".to_string(),
+            "level".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "low".to_string(),
-            "Low".to_string(),
+            "low".to_string(),
+            "Low".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "medium".to_string(),
-            "Medium".to_string(),
+            "medium".to_string(),
+            "Medium".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x43,
-            "high".to_string(),
-            "High".to_string(),
+            "high".to_string(),
+            "High".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x44,
-            "none".to_string(),
-            "None".to_string(),
+            "none".to_string(),
+            "None".to_string(),
         ));
         obj.add_standard_property(
             0xEE,
-            "One-time opening speed setting".to_string(),
-            "state".to_string(),
+            "One-time opening speed setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "low".to_string(),
-            "Low".to_string(),
+            "low".to_string(),
+            "Low".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "medium".to_string(),
-            "Medium".to_string(),
+            "medium".to_string(),
+            "Medium".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x43,
-            "high".to_string(),
-            "High".to_string(),
+            "high".to_string(),
+            "High".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x44,
-            "none".to_string(),
-            "None".to_string(),
+            "none".to_string(),
+            "None".to_string(),
         ));
         obj.add_standard_property(
             0xEF,
-            "One-time closing speed setting".to_string(),
-            "state".to_string(),
+            "One-time closing speed setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // CO2 sensor (0x001B)
-        let mut obj = self.create_standard_object("CO2 sensor".to_string(), 0x00, 0x1B);
+        let mut obj = self.create_standard_object("CO2 sensor".to_string(), 0x00, 0x1B);
         obj.add_standard_property(
             0xE0,
-            "Measured value of CO2 concentration".to_string(),
-            "number".to_string(),
+            "Measured value of CO2 concentration".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Current sensor (0x0023)
-        let mut obj = self.create_standard_object("Current sensor".to_string(), 0x00, 0x23);
+        let mut obj = self.create_standard_object("Current sensor".to_string(), 0x00, 0x23);
         obj.add_standard_property(
             0xE0,
-            "Measured current value 1".to_string(),
-            "number".to_string(),
+            "Measured current value 1".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE1,
-            "Rated voltage to be measured".to_string(),
-            "number".to_string(),
+            "Rated voltage to be measured".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE2,
-            "Measured current value 2".to_string(),
-            "number".to_string(),
+            "Measured current value 2".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // EV Charger (0x02A1)
-        let mut obj = self.create_standard_object("EV Charger".to_string(), 0x02, 0xA1);
+        let mut obj = self.create_standard_object("EV Charger".to_string(), 0x02, 0xA1);
         obj.add_standard_property(
             0xC5,
-            "Rated charge capacity".to_string(),
-            "number".to_string(),
+            "Rated charge capacity".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC7,
-            "Vehicle connection and chargeable status".to_string(),
-            "state".to_string(),
+            "Vehicle connection and chargeable status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC7,
-            "Vehicle connection and chargeable status".to_string(),
-            "state".to_string(),
+            "Vehicle connection and chargeable status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC8,
-            "Minimum/maximum charging electric energy".to_string(),
-            "object".to_string(),
+            "Minimum/maximum charging electric energy".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCA,
-            "Minimum/maximum charging electric current".to_string(),
-            "object".to_string(),
+            "Minimum/maximum charging electric current".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCC,
-            "Charger type".to_string(),
-            "state".to_string(),
+            "Charger type".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCD,
-            "Vehicle connection confirmation".to_string(),
-            "state".to_string(),
+            "Vehicle connection confirmation".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCE,
-            "Chargeable capacity of vehicle mounted battery".to_string(),
-            "number".to_string(),
+            "Chargeable capacity of vehicle mounted battery".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCF,
-            "Remaining chargeable capacity of vehicle mounted battery".to_string(),
-            "number".to_string(),
+            "Remaining chargeable capacity of vehicle mounted battery".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD0,
-            "Used capacity of vehicle mounted battery 1".to_string(),
-            "number".to_string(),
+            "Used capacity of vehicle mounted battery 1".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD2,
-            "Rated voltage".to_string(),
-            "number".to_string(),
+            "Rated voltage".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD3,
-            "Measured instantaneous charging electric energy".to_string(),
-            "number".to_string(),
+            "Measured instantaneous charging electric energy".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD8,
-            "Measured cumulative amount of charging electric energy".to_string(),
-            "number".to_string(),
+            "Measured cumulative amount of charging electric energy".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x00,
-            "reset".to_string(),
-            "Reset".to_string(),
+            "reset".to_string(),
+            "Reset".to_string(),
         ));
         obj.add_standard_property(
             0xD9,
-            "Cumulative amount of charging electric energy reset setting".to_string(),
-            "state".to_string(),
+            "Cumulative amount of charging electric energy reset setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDA,
-            "Operation mode setting".to_string(),
-            "state".to_string(),
+            "Operation mode setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE2,
-            "Remaining stored electricity of vehicle mounted battery1".to_string(),
-            "number".to_string(),
+            "Remaining stored electricity of vehicle mounted battery1".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE4,
-            "Remaining stored electricity of vehicle mounted battery3".to_string(),
-            "number".to_string(),
+            "Remaining stored electricity of vehicle mounted battery3".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE6,
-            "Vehicle ID".to_string(),
-            "object".to_string(),
+            "Vehicle ID".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE7,
-            "Charging amount setting".to_string(),
-            "number".to_string(),
+            "Charging amount setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEB,
-            "Charging electric energy setting".to_string(),
-            "number".to_string(),
+            "Charging electric energy setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xED,
-            "Charging current setting".to_string(),
-            "number".to_string(),
+            "Charging current setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Watt-hour meter (0x0280)
-        let mut obj = self.create_standard_object("Watt-hour meter".to_string(), 0x02, 0x80);
+        let mut obj = self.create_standard_object("Watt-hour meter".to_string(), 0x02, 0x80);
         obj.add_standard_property(
             0xE0,
-            "Cumulative amounts of electric energy measurement value".to_string(),
-            "number".to_string(),
+            "Cumulative amounts of electric energy measurement value".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE2,
-            "Cumulative amounts of electric energy unit".to_string(),
-            "numericValue".to_string(),
+            "Cumulative amounts of electric energy unit".to_string(),
+            "numericValue".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE3,
-            "Cumulative amounts of electric energy measurement log 1".to_string(),
-            "array".to_string(),
+            "Cumulative amounts of electric energy measurement log 1".to_string(),
+            "array".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Emergency button (0x0003)
-        let mut obj = self.create_standard_object("Emergency button".to_string(), 0x00, 0x03);
+        let mut obj = self.create_standard_object("Emergency button".to_string(), 0x00, 0x03);
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "true".to_string(),
-            "YES".to_string(),
+            "true".to_string(),
+            "YES".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "false".to_string(),
-            "NO".to_string(),
+            "false".to_string(),
+            "NO".to_string(),
         ));
         obj.add_standard_property(
             0xB1,
-            "Emergency occurrence status".to_string(),
-            "state".to_string(),
+            "Emergency occurrence status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x00,
-            "reset".to_string(),
-            "Reset".to_string(),
+            "reset".to_string(),
+            "Reset".to_string(),
         ));
         obj.add_standard_property(
             0xBF,
-            "Emergency occurrence status resetting".to_string(),
-            "state".to_string(),
+            "Emergency occurrence status resetting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Household solar power generation (0x0279)
         let mut obj =
-            self.create_standard_object("Household solar power generation".to_string(), 0x02, 0x79);
+            self.create_standard_object("Household solar power generation".to_string(), 0x02, 0x79);
         obj.add_standard_property(
             0x83,
-            "Identification number".to_string(),
-            "raw".to_string(),
+            "Identification number".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x97,
-            "Current time setting".to_string(),
-            "time".to_string(),
+            "Current time setting".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x98,
-            "Current date setting".to_string(),
-            "date".to_string(),
+            "Current date setting".to_string(),
+            "date".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xA0,
-            "Output power control setting 1".to_string(),
-            "number".to_string(),
+            "Output power control setting 1".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xA1,
-            "Output power control setting 2".to_string(),
-            "number".to_string(),
+            "Output power control setting 2".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "true".to_string(),
-            "Valid".to_string(),
+            "true".to_string(),
+            "Valid".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "false".to_string(),
-            "Invalid".to_string(),
+            "false".to_string(),
+            "Invalid".to_string(),
         ));
         obj.add_standard_property(
             0xA2,
-            "Function to control purchase surplus electricity setting".to_string(),
-            "state".to_string(),
+            "Function to control purchase surplus electricity setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB0,
-            "Output power controlling schedule".to_string(),
-            "object".to_string(),
+            "Output power controlling schedule".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB1,
-            "Next access date and time".to_string(),
-            "".to_string(),
+            "Next access date and time".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "true".to_string(),
-            "Valid".to_string(),
+            "true".to_string(),
+            "Valid".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "false".to_string(),
-            "Invalid".to_string(),
+            "false".to_string(),
+            "Invalid".to_string(),
         ));
         obj.add_standard_property(
             0xB2,
-            "Function to control the type of surplus electricity purchase".to_string(),
-            "state".to_string(),
+            "Function to control the type of surplus electricity purchase".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB3,
-            "Output power change time setting value".to_string(),
-            "number".to_string(),
+            "Output power change time setting value".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB4,
-            "Upper limit clip setting value".to_string(),
-            "".to_string(),
+            "Upper limit clip setting value".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC0,
-            "Operation power factor setting value".to_string(),
-            "number".to_string(),
+            "Operation power factor setting value".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC1,
-            "FIT contract type".to_string(),
-            "state".to_string(),
+            "FIT contract type".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC2,
-            "Self-consumption type".to_string(),
-            "state".to_string(),
+            "Self-consumption type".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC3,
-            "Capacity approved by equipment".to_string(),
-            "".to_string(),
+            "Capacity approved by equipment".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC4,
-            "Conversion coefficient".to_string(),
-            "number".to_string(),
+            "Conversion coefficient".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD0,
-            "System-interconnected type".to_string(),
-            "state".to_string(),
+            "System-interconnected type".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD0,
-            "System-interconnected type".to_string(),
-            "state".to_string(),
+            "System-interconnected type".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD1,
-            "Output power restraint status".to_string(),
-            "state".to_string(),
+            "Output power restraint status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE0,
-            "Measured instantaneous amount of electricity generated".to_string(),
-            "number".to_string(),
+            "Measured instantaneous amount of electricity generated".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE1,
-            "Measured cumulative amount of electric energy generated".to_string(),
-            "number".to_string(),
+            "Measured cumulative amount of electric energy generated".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x00,
-            "reset".to_string(),
-            "Reset".to_string(),
+            "reset".to_string(),
+            "Reset".to_string(),
         ));
         obj.add_standard_property(
             0xE2,
-            "Resetting cumulative amount of electric energy generated".to_string(),
-            "state".to_string(),
+            "Resetting cumulative amount of electric energy generated".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE3,
-            "Measured cumulative amount of electric energy sold".to_string(),
-            "number".to_string(),
+            "Measured cumulative amount of electric energy sold".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x00,
-            "reset".to_string(),
-            "Reset".to_string(),
+            "reset".to_string(),
+            "Reset".to_string(),
         ));
         obj.add_standard_property(
             0xE4,
-            "Resetting cumulative amount of electric energy sold".to_string(),
-            "state".to_string(),
+            "Resetting cumulative amount of electric energy sold".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE5,
-            "Power generation output limit setting 1".to_string(),
-            "number".to_string(),
+            "Power generation output limit setting 1".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE6,
-            "Power generation output limit setting 2".to_string(),
-            "number".to_string(),
+            "Power generation output limit setting 2".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE7,
-            "Limit setting for the amount of electricity sold".to_string(),
-            "number".to_string(),
+            "Limit setting for the amount of electricity sold".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE8,
-            "Rated power generation output (System-interconnected)".to_string(),
-            "number".to_string(),
+            "Rated power generation output (System-interconnected)".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE8,
-            "Rated power generation output (System-interconnected)".to_string(),
-            "".to_string(),
+            "Rated power generation output (System-interconnected)".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE9,
-            "Rated power generation output (Independent)".to_string(),
-            "number".to_string(),
+            "Rated power generation output (Independent)".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Floor heater (0x027B)
-        let mut obj = self.create_standard_object("Floor heater".to_string(), 0x02, 0x7B);
+        let mut obj = self.create_standard_object("Floor heater".to_string(), 0x02, 0x7B);
         prop_enums.push(self.create_standard_property_enum(
             0x30,
-            "true".to_string(),
-            "On".to_string(),
+            "true".to_string(),
+            "On".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x31,
-            "false".to_string(),
-            "Off".to_string(),
+            "false".to_string(),
+            "Off".to_string(),
         ));
         obj.add_standard_property(
             0x80,
-            "Operation status".to_string(),
-            "state".to_string(),
+            "Operation status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "on".to_string(),
-            "ON".to_string(),
+            "on".to_string(),
+            "ON".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "off".to_string(),
-            "OFF".to_string(),
+            "off".to_string(),
+            "OFF".to_string(),
         ));
         obj.add_standard_property(
             0x90,
-            "ON timer reservation setting".to_string(),
-            "state".to_string(),
+            "ON timer reservation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x91,
-            "Time set by ON timer".to_string(),
-            "time".to_string(),
+            "Time set by ON timer".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x92,
-            "Relative ON timer setting".to_string(),
-            "time".to_string(),
+            "Relative ON timer setting".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "on".to_string(),
-            "ON".to_string(),
+            "on".to_string(),
+            "ON".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "off".to_string(),
-            "OFF".to_string(),
+            "off".to_string(),
+            "OFF".to_string(),
         ));
         obj.add_standard_property(
             0x94,
-            "OFF timer reservation setting".to_string(),
-            "state".to_string(),
+            "OFF timer reservation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x95,
-            "Time set by OFF timer".to_string(),
-            "time".to_string(),
+            "Time set by OFF timer".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x96,
-            "Relative OFF timer setting".to_string(),
-            "time".to_string(),
+            "Relative OFF timer setting".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD1,
-            "Maximum temperature level".to_string(),
-            "number".to_string(),
+            "Maximum temperature level".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE0,
-            "Set temperature value".to_string(),
-            "".to_string(),
+            "Set temperature value".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE1,
-            "Set temperature level by 15 steps".to_string(),
-            "".to_string(),
+            "Set temperature level by 15 steps".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE2,
-            "Measured room temperature".to_string(),
-            "".to_string(),
+            "Measured room temperature".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE3,
-            "Measured floor temperature".to_string(),
-            "".to_string(),
+            "Measured floor temperature".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE3,
-            "Measured floor temperature".to_string(),
-            "".to_string(),
+            "Measured floor temperature".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE4,
-            "Zone change setting".to_string(),
-            "bitmap".to_string(),
+            "Zone change setting".to_string(),
+            "bitmap".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE5,
-            "Special operation setting".to_string(),
-            "state".to_string(),
+            "Special operation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE6,
-            "Daily timer setting".to_string(),
-            "state".to_string(),
+            "Daily timer setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE7,
-            "Daily timer setting 1".to_string(),
-            "bitmap".to_string(),
+            "Daily timer setting 1".to_string(),
+            "bitmap".to_string(),
             6,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE8,
-            "Daily timer setting 2".to_string(),
-            "bitmap".to_string(),
+            "Daily timer setting 2".to_string(),
+            "bitmap".to_string(),
             6,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE9,
-            "Rated power consumption".to_string(),
-            "number".to_string(),
+            "Rated power consumption".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEA,
-            "Power consumption measurement method".to_string(),
-            "state".to_string(),
+            "Power consumption measurement method".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Bath heating status sensor (0x0016)
         let mut obj =
-            self.create_standard_object("Bath heating status sensor".to_string(), 0x00, 0x16);
+            self.create_standard_object("Bath heating status sensor".to_string(), 0x00, 0x16);
         obj.add_standard_property(
             0xB0,
-            "Detection threshold level".to_string(),
-            "level".to_string(),
+            "Detection threshold level".to_string(),
+            "level".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "true".to_string(),
-            "Detected".to_string(),
+            "true".to_string(),
+            "Detected".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "false".to_string(),
-            "Not detected".to_string(),
+            "false".to_string(),
+            "Not detected".to_string(),
         ));
         obj.add_standard_property(
             0xB1,
-            "Bath heating detection status".to_string(),
-            "state".to_string(),
+            "Bath heating detection status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Cold or hot water heat source equipment (0x027A)
         let mut obj = self.create_standard_object(
-            "Cold or hot water heat source equipment".to_string(),
+            "Cold or hot water heat source equipment".to_string(),
             0x02,
             0x7A,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "true".to_string(),
-            "ON".to_string(),
+            "true".to_string(),
+            "ON".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "false".to_string(),
-            "OFF".to_string(),
+            "false".to_string(),
+            "OFF".to_string(),
         ));
         obj.add_standard_property(
             0x90,
-            "ON timer reservation setting".to_string(),
-            "state".to_string(),
+            "ON timer reservation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x91,
-            "ON timer setting".to_string(),
-            "time".to_string(),
+            "ON timer setting".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x92,
-            "Relative ON timer setting".to_string(),
-            "time".to_string(),
+            "Relative ON timer setting".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "true".to_string(),
-            "ON".to_string(),
+            "true".to_string(),
+            "ON".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "false".to_string(),
-            "OFF".to_string(),
+            "false".to_string(),
+            "OFF".to_string(),
         ));
         obj.add_standard_property(
             0x94,
-            "OFF timer reservation setting".to_string(),
-            "state".to_string(),
+            "OFF timer reservation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x95,
-            "Time set by OFF timer".to_string(),
-            "time".to_string(),
+            "Time set by OFF timer".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0x96,
-            "Relative OFF timer setting".to_string(),
-            "time".to_string(),
+            "Relative OFF timer setting".to_string(),
+            "time".to_string(),
             2,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD1,
-            "Cold water temperature setting 2 Maximum allowable setting level".to_string(),
-            "number".to_string(),
+            "Cold water temperature setting 2 Maximum allowable setting level".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD2,
-            "Warm water temperature setting 2 Maximum allowable setting level".to_string(),
-            "number".to_string(),
+            "Warm water temperature setting 2 Maximum allowable setting level".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE0,
-            "Operation mode setting".to_string(),
-            "state".to_string(),
+            "Operation mode setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE1,
-            "Water temperature setting 1".to_string(),
-            "".to_string(),
+            "Water temperature setting 1".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE2,
-            "Water temperature setting 2".to_string(),
-            "".to_string(),
+            "Water temperature setting 2".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE3,
-            "Measured temperature of outward water (Exit water Temperature)".to_string(),
-            "".to_string(),
+            "Measured temperature of outward water (Exit water Temperature)".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE4,
-            "Measured temperature of inward water (Entrance water Temperature)".to_string(),
-            "".to_string(),
+            "Measured temperature of inward water (Entrance water Temperature)".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE5,
-            "Special operation setting".to_string(),
-            "state".to_string(),
+            "Special operation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE6,
-            "Daily timer setting".to_string(),
-            "state".to_string(),
+            "Daily timer setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE7,
-            "Daily timer setting 1".to_string(),
-            "raw".to_string(),
+            "Daily timer setting 1".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE8,
-            "Daily timer setting 2".to_string(),
-            "raw".to_string(),
+            "Daily timer setting 2".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE9,
-            "Rated power consumption".to_string(),
-            "object".to_string(),
+            "Rated power consumption".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEA,
-            "Power consumption measurement method".to_string(),
-            "state".to_string(),
+            "Power consumption measurement method".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Smart electric energy meter for sub-metering (0x028D)
         let mut obj = self.create_standard_object(
-            "Smart electric energy meter for sub-metering".to_string(),
+            "Smart electric energy meter for sub-metering".to_string(),
             0x02,
             0x8D,
         );
         obj.add_standard_property(
             0xD3,
-            "Electric energy coefficient".to_string(),
-            "number".to_string(),
+            "Electric energy coefficient".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD4,
-            "Unit for cumulative amount of electric energy (normal and reverse directions)"
+            "Unit for cumulative amount of electric energy (normal and reverse directions)"
                 .to_string(),
-            "numericValue".to_string(),
+            "numericValue".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD7,
-            "Number of effective digits for cumulative amounts of electric energy".to_string(),
-            "number".to_string(),
+            "Number of effective digits for cumulative amounts of electric energy".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD8,
-            "Electric current coefficient".to_string(),
-            "number".to_string(),
+            "Electric current coefficient".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD9,
-            "Voltage coefficient".to_string(),
-            "number".to_string(),
+            "Voltage coefficient".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
-        obj.add_standard_property(0xE0, "Day for which the historical data of measured cumulative amounts of electric energy is to be retrieved".to_string(), "".to_string(), 0, property_string_to_attribute("required"), property_string_to_attribute("required"), property_string_to_attribute("optional"), &mut prop_enums);
+        obj.add_standard_property(0xE0, "Day for which the historical data of measured cumulative amounts of electric energy is to be retrieved".to_string(), "".to_string(), 0, property_string_to_attribute("required"), property_string_to_attribute("required"), property_string_to_attribute("optional"), &mut prop_enums);
         obj.add_standard_property(
             0xE1,
-            "Measured cumulative amount of electric energy(normal direction)".to_string(),
-            "".to_string(),
+            "Measured cumulative amount of electric energy(normal direction)".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE2,
-            "Historical data of measured cumulative amounts of electric energy (normal direction)"
+            "Historical data of measured cumulative amounts of electric energy (normal direction)"
                 .to_string(),
-            "object".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE3,
-            "Measured cumulative amount of electric energy (reverse direction)".to_string(),
-            "".to_string(),
+            "Measured cumulative amount of electric energy (reverse direction)".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE4,
-            "Historical data of measured cumulative amounts of electric energy (reverse direction)"
+            "Historical data of measured cumulative amounts of electric energy (reverse direction)"
                 .to_string(),
-            "object".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE7,
-            "Measured instantaneous electric power".to_string(),
-            "".to_string(),
+            "Measured instantaneous electric power".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE8,
-            "Measured instantaneous currents".to_string(),
-            "object".to_string(),
+            "Measured instantaneous currents".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE9,
-            "Measured instantaneous voltages".to_string(),
-            "object".to_string(),
+            "Measured instantaneous voltages".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEA,
-            "Cumulative amounts of electric energy measured at fixed time(normal direction)"
+            "Cumulative amounts of electric energy measured at fixed time(normal direction)"
                 .to_string(),
-            "object".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEB,
-            "Cumulative amounts of electric energy measured at fixed time(reverse direction)"
+            "Cumulative amounts of electric energy measured at fixed time(reverse direction)"
                 .to_string(),
-            "object".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Lighting system (0x02A3)
-        let mut obj = self.create_standard_object("Lighting system".to_string(), 0x02, 0xA3);
+        let mut obj = self.create_standard_object("Lighting system".to_string(), 0x02, 0xA3);
         obj.add_standard_property(
             0xB0,
-            "Light level setting".to_string(),
-            "number".to_string(),
+            "Light level setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC0,
-            "Scene control setting".to_string(),
-            "".to_string(),
+            "Scene control setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC1,
-            "Number that can assign scene control setting".to_string(),
-            "number".to_string(),
+            "Number that can assign scene control setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Ventilation fan (0x0133)
-        let mut obj = self.create_standard_object("Ventilation fan".to_string(), 0x01, 0x33);
+        let mut obj = self.create_standard_object("Ventilation fan".to_string(), 0x01, 0x33);
         prop_enums.push(self.create_standard_property_enum(
             0x30,
-            "true".to_string(),
-            "On".to_string(),
+            "true".to_string(),
+            "On".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x31,
-            "false".to_string(),
-            "Off".to_string(),
+            "false".to_string(),
+            "Off".to_string(),
         ));
         obj.add_standard_property(
             0x80,
-            "Operation status".to_string(),
-            "state".to_string(),
+            "Operation status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xA0,
-            "Set value of ventilation air flow rate".to_string(),
-            "".to_string(),
+            "Set value of ventilation air flow rate".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "true".to_string(),
-            "Auto".to_string(),
+            "true".to_string(),
+            "Auto".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "false".to_string(),
-            "Non-auto".to_string(),
+            "false".to_string(),
+            "Non-auto".to_string(),
         ));
         obj.add_standard_property(
             0xBF,
-            "Ventilation Auto setting".to_string(),
-            "state".to_string(),
+            "Ventilation Auto setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
-        // distributed generator's electric energy meter (0x028E)
+        // distributed generator's electric energy meter (0x028E)
         let mut obj = self.create_standard_object(
-            "distributed generator's electric energy meter".to_string(),
+            "distributed generator's electric energy meter".to_string(),
             0x02,
             0x8E,
         );
         obj.add_standard_property(
             0x98,
-            "Current date setting".to_string(),
-            "date".to_string(),
+            "Current date setting".to_string(),
+            "date".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD0,
-            "Device type".to_string(),
-            "raw".to_string(),
+            "Device type".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD1,
-            "Device ID".to_string(),
-            "raw".to_string(),
+            "Device ID".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD2,
-            "Tolerance class".to_string(),
-            "state".to_string(),
+            "Tolerance class".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
-        obj.add_standard_property(0xD3, "Number of days to retain historical data of measured cumulative amounts of electric energy".to_string(), "".to_string(), 0, property_string_to_attribute("required"), property_string_to_attribute("notApplicable"), property_string_to_attribute("optional"), &mut prop_enums);
+        obj.add_standard_property(0xD3, "Number of days to retain historical data of measured cumulative amounts of electric energy".to_string(), "".to_string(), 0, property_string_to_attribute("required"), property_string_to_attribute("notApplicable"), property_string_to_attribute("optional"), &mut prop_enums);
         obj.add_standard_property(
             0xD4,
-            "Unit for cumulative amounts of electric energy".to_string(),
-            "numericValue".to_string(),
+            "Unit for cumulative amounts of electric energy".to_string(),
+            "numericValue".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
-        obj.add_standard_property(0xD5, "Day on which the historical data of measured cumulative amounts of electric energy is to be retrieved".to_string(), "".to_string(), 0, property_string_to_attribute("required_c"), property_string_to_attribute("required"), property_string_to_attribute("optional"), &mut prop_enums);
+        obj.add_standard_property(0xD5, "Day on which the historical data of measured cumulative amounts of electric energy is to be retrieved".to_string(), "".to_string(), 0, property_string_to_attribute("required_c"), property_string_to_attribute("required"), property_string_to_attribute("optional"), &mut prop_enums);
         obj.add_standard_property(
             0xD6,
-            "Identification number of device to be metered".to_string(),
-            "raw".to_string(),
+            "Identification number of device to be metered".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDA,
-            "Current hour, minute, and second setting".to_string(),
-            "time".to_string(),
+            "Current hour, minute, and second setting".to_string(),
+            "time".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDB,
-            "Time synchronization status".to_string(),
-            "state".to_string(),
+            "Time synchronization status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE0,
-            "Measured cumulative amounts of electric energy (AC input)".to_string(),
-            "number".to_string(),
+            "Measured cumulative amounts of electric energy (AC input)".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE1,
-            "Historical data of measured cumulative amounts of electric energy (AC input)"
+            "Historical data of measured cumulative amounts of electric energy (AC input)"
                 .to_string(),
-            "object".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE2,
-            "Measured cumulative amounts of electric energy (AC output)".to_string(),
-            "number".to_string(),
+            "Measured cumulative amounts of electric energy (AC output)".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE3,
-            "Historical data of measured cumulative amounts of electric energy (AC output)"
+            "Historical data of measured cumulative amounts of electric energy (AC output)"
                 .to_string(),
-            "object".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE4,
-            "Measured cumulative amounts of electric energy (output during a power outage)"
+            "Measured cumulative amounts of electric energy (output during a power outage)"
                 .to_string(),
-            "".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
-        obj.add_standard_property(0xE5, "Historical data of measured cumulative amounts of electric energy (output during a power outage )".to_string(), "object".to_string(), 0, property_string_to_attribute("optional"), property_string_to_attribute("notApplicable"), property_string_to_attribute("optional"), &mut prop_enums);
+        obj.add_standard_property(0xE5, "Historical data of measured cumulative amounts of electric energy (output during a power outage )".to_string(), "object".to_string(), 0, property_string_to_attribute("optional"), property_string_to_attribute("notApplicable"), property_string_to_attribute("optional"), &mut prop_enums);
         obj.add_standard_property(
             0xE6,
-            "Cumulative amounts of electric energy measured at fixed time (AC input)".to_string(),
-            "object".to_string(),
+            "Cumulative amounts of electric energy measured at fixed time (AC input)".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE7,
-            "Cumulative amounts of electric energy measured at fixed time (AC output)".to_string(),
-            "object".to_string(),
+            "Cumulative amounts of electric energy measured at fixed time (AC output)".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
-        obj.add_standard_property(0xE8, "Cumulative amounts of electric energy measured at fixed time (output during a power outage)".to_string(), "object".to_string(), 0, property_string_to_attribute("optional"), property_string_to_attribute("notApplicable"), property_string_to_attribute("optional"), &mut prop_enums);
+        obj.add_standard_property(0xE8, "Cumulative amounts of electric energy measured at fixed time (output during a power outage)".to_string(), "object".to_string(), 0, property_string_to_attribute("optional"), property_string_to_attribute("notApplicable"), property_string_to_attribute("optional"), &mut prop_enums);
         obj.add_standard_property(
             0xE9,
-            "Measured instantaneous electric power (AC input/output)".to_string(),
-            "".to_string(),
+            "Measured instantaneous electric power (AC input/output)".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEA,
-            "Measured instantaneous electric power (output during a power outage)".to_string(),
-            "".to_string(),
+            "Measured instantaneous electric power (output during a power outage)".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Electric lock (0x026F)
-        let mut obj = self.create_standard_object("Electric lock".to_string(), 0x02, 0x6F);
+        let mut obj = self.create_standard_object("Electric lock".to_string(), 0x02, 0x6F);
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "true".to_string(),
-            "Lock".to_string(),
+            "true".to_string(),
+            "Lock".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "false".to_string(),
-            "Unlock".to_string(),
+            "false".to_string(),
+            "Unlock".to_string(),
         ));
         obj.add_standard_property(
             0xE0,
-            "Lock setting1".to_string(),
-            "state".to_string(),
+            "Lock setting1".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "true".to_string(),
-            "Lock".to_string(),
+            "true".to_string(),
+            "Lock".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "false".to_string(),
-            "Unlock".to_string(),
+            "false".to_string(),
+            "Unlock".to_string(),
         ));
         obj.add_standard_property(
             0xE1,
-            "Lock setting 2".to_string(),
-            "state".to_string(),
+            "Lock setting 2".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "true".to_string(),
-            "Lock".to_string(),
+            "true".to_string(),
+            "Lock".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "false".to_string(),
-            "Unlock".to_string(),
+            "false".to_string(),
+            "Unlock".to_string(),
         ));
         obj.add_standard_property(
             0xE2,
-            "Lock status of door guard".to_string(),
-            "state".to_string(),
+            "Lock status of door guard".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "true".to_string(),
-            "Open".to_string(),
+            "true".to_string(),
+            "Open".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "false".to_string(),
-            "Closed".to_string(),
+            "false".to_string(),
+            "Closed".to_string(),
         ));
         obj.add_standard_property(
             0xE3,
-            "Door open/close status".to_string(),
-            "state".to_string(),
+            "Door open/close status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE4,
-            "Occupant/ non-occupant status".to_string(),
-            "state".to_string(),
+            "Occupant/ non-occupant status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE5,
-            "Alarm status".to_string(),
-            "state".to_string(),
+            "Alarm status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "true".to_string(),
-            "ON".to_string(),
+            "true".to_string(),
+            "ON".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "false".to_string(),
-            "OFF".to_string(),
+            "false".to_string(),
+            "OFF".to_string(),
         ));
         obj.add_standard_property(
             0xE6,
-            "Auto lock mode setting".to_string(),
-            "state".to_string(),
+            "Auto lock mode setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE7,
-            "Battery level".to_string(),
-            "state".to_string(),
+            "Battery level".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Gas meter (0x0282)
-        let mut obj = self.create_standard_object("Gas meter".to_string(), 0x02, 0x82);
+        let mut obj = self.create_standard_object("Gas meter".to_string(), 0x02, 0x82);
         obj.add_standard_property(
             0xE0,
-            "Cumulative amount of gas consumption measurement value".to_string(),
-            "number".to_string(),
+            "Cumulative amount of gas consumption measurement value".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE2,
-            "Cumulative amounts of gas consumption measurement log".to_string(),
-            "array".to_string(),
+            "Cumulative amounts of gas consumption measurement log".to_string(),
+            "array".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Air conditioner ventilation fan (0x0134)
         let mut obj =
-            self.create_standard_object("Air conditioner ventilation fan".to_string(), 0x01, 0x34);
+            self.create_standard_object("Air conditioner ventilation fan".to_string(), 0x01, 0x34);
         prop_enums.push(self.create_standard_property_enum(
             0x30,
-            "true".to_string(),
-            "On".to_string(),
+            "true".to_string(),
+            "On".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x31,
-            "false".to_string(),
-            "Off".to_string(),
+            "false".to_string(),
+            "Off".to_string(),
         ));
         obj.add_standard_property(
             0x80,
-            "Operation status".to_string(),
-            "state".to_string(),
+            "Operation status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xA0,
-            "Set value of ventilation air flow rate".to_string(),
-            "".to_string(),
+            "Set value of ventilation air flow rate".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "true".to_string(),
-            "Auto".to_string(),
+            "true".to_string(),
+            "Auto".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "false".to_string(),
-            "Non-auto".to_string(),
+            "false".to_string(),
+            "Non-auto".to_string(),
         ));
         obj.add_standard_property(
             0xB0,
-            "Ventilation mode automatic setting".to_string(),
-            "state".to_string(),
+            "Ventilation mode automatic setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB1,
-            "Ventilation method setting".to_string(),
-            "state".to_string(),
+            "Ventilation method setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB2,
-            "Ventilation mode setting".to_string(),
-            "state".to_string(),
+            "Ventilation mode setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB3,
-            "Cooling / heating high-low setting".to_string(),
-            "level".to_string(),
+            "Cooling / heating high-low setting".to_string(),
+            "level".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB4,
-            "Set value of room relative humidity".to_string(),
-            "number".to_string(),
+            "Set value of room relative humidity".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB9,
-            "Measured value of electric current consumption".to_string(),
-            "number".to_string(),
+            "Measured value of electric current consumption".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xBA,
-            "Measured value of room relative humidity".to_string(),
-            "".to_string(),
+            "Measured value of room relative humidity".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xBE,
-            "Measured value of outdoor air temperature".to_string(),
-            "".to_string(),
+            "Measured value of outdoor air temperature".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "true".to_string(),
-            "Auto".to_string(),
+            "true".to_string(),
+            "Auto".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "false".to_string(),
-            "Non-auto".to_string(),
+            "false".to_string(),
+            "Non-auto".to_string(),
         ));
         obj.add_standard_property(
             0xBF,
-            "Ventilation auto setting".to_string(),
-            "state".to_string(),
+            "Ventilation auto setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC0,
-            "Measured value of CO2 concentration".to_string(),
-            "number".to_string(),
+            "Measured value of CO2 concentration".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC1,
-            "Smoke (cigarette) detection status".to_string(),
-            "state".to_string(),
+            "Smoke (cigarette) detection status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC2,
-            "Pollution detection status".to_string(),
-            "state".to_string(),
+            "Pollution detection status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCA,
-            "Measured value of outdoor relative humidity".to_string(),
-            "".to_string(),
+            "Measured value of outdoor relative humidity".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD0,
-            "Measured value of return air temperature".to_string(),
-            "array".to_string(),
+            "Measured value of return air temperature".to_string(),
+            "array".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD1,
-            "Measured value of return relative humidity".to_string(),
-            "array".to_string(),
+            "Measured value of return relative humidity".to_string(),
+            "array".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD2,
-            "Measured value of charging air temperature".to_string(),
-            "".to_string(),
+            "Measured value of charging air temperature".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD3,
-            "Measured value of charging relative humidity".to_string(),
-            "".to_string(),
+            "Measured value of charging relative humidity".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD4,
-            "Measured value of discharging air temperature".to_string(),
-            "".to_string(),
+            "Measured value of discharging air temperature".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD5,
-            "Measured value of discharging air relative humidity".to_string(),
-            "".to_string(),
+            "Measured value of discharging air relative humidity".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE0,
-            "Heat exchanger operation setting".to_string(),
-            "state".to_string(),
+            "Heat exchanger operation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Controller (0x05FF)
-        let mut obj = self.create_standard_object("Controller".to_string(), 0x05, 0xFF);
+        let mut obj = self.create_standard_object("Controller".to_string(), 0x05, 0xFF);
         obj.add_standard_property(
             0xC0,
-            "Controller ID".to_string(),
-            "raw".to_string(),
+            "Controller ID".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC1,
-            "Number of devices controlled".to_string(),
-            "number".to_string(),
+            "Number of devices controlled".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC2,
-            "Index".to_string(),
-            "number".to_string(),
+            "Index".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC3,
-            "Device ID".to_string(),
-            "raw".to_string(),
+            "Device ID".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC4,
-            "Device type".to_string(),
-            "raw".to_string(),
+            "Device type".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC5,
-            "Name".to_string(),
-            "raw".to_string(),
+            "Name".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC6,
-            "Connection status".to_string(),
-            "state".to_string(),
+            "Connection status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC7,
-            "Business code of the device to be controlled".to_string(),
-            "raw".to_string(),
+            "Business code of the device to be controlled".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC7,
-            "Business code of the device to be controlled".to_string(),
-            "raw".to_string(),
+            "Business code of the device to be controlled".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC8,
-            "Product code of the device to be controlled".to_string(),
-            "raw".to_string(),
+            "Product code of the device to be controlled".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC8,
-            "Product code of the device to be controlled".to_string(),
-            "raw".to_string(),
+            "Product code of the device to be controlled".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC9,
-            "Manufacture date of the device to be controlled".to_string(),
-            "date".to_string(),
+            "Manufacture date of the device to be controlled".to_string(),
+            "date".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC9,
-            "Manufacture date of the device to be controlled".to_string(),
-            "date".to_string(),
+            "Manufacture date of the device to be controlled".to_string(),
+            "date".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCA,
-            "Registered information renewal date of the device to be controlled".to_string(),
-            "date".to_string(),
+            "Registered information renewal date of the device to be controlled".to_string(),
+            "date".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCA,
-            "Registered information renewal date of the device to be controlled".to_string(),
-            "date".to_string(),
+            "Registered information renewal date of the device to be controlled".to_string(),
+            "date".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCB,
-            "Registered information renewal version information of the device to be controlled"
+            "Registered information renewal version information of the device to be controlled"
                 .to_string(),
-            "number".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCB,
-            "Registered information renewal version information of the device to be controlled"
+            "Registered information renewal version information of the device to be controlled"
                 .to_string(),
-            "number".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCC,
-            "Place to install device to be controlled".to_string(),
-            "raw".to_string(),
+            "Place to install device to be controlled".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "true".to_string(),
-            "YES".to_string(),
+            "true".to_string(),
+            "YES".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "false".to_string(),
-            "NO".to_string(),
+            "false".to_string(),
+            "NO".to_string(),
         ));
         obj.add_standard_property(
             0xCD,
-            "Fault status of device to be controlled".to_string(),
-            "state".to_string(),
+            "Fault status of device to be controlled".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCE,
-            "Set property map for device to be controlled".to_string(),
-            "raw".to_string(),
+            "Set property map for device to be controlled".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xCF,
-            "Get property map for device to be controlled".to_string(),
-            "raw".to_string(),
+            "Get property map for device to be controlled".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE0,
-            "Address of installation location".to_string(),
-            "raw".to_string(),
+            "Address of installation location".to_string(),
+            "raw".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Extended lighting system (0x02A4)
         let mut obj =
-            self.create_standard_object("Extended lighting system".to_string(), 0x02, 0xA4);
+            self.create_standard_object("Extended lighting system".to_string(), 0x02, 0xA4);
         obj.add_standard_property(
             0xB0,
-            "Light level setting".to_string(),
-            "number".to_string(),
+            "Light level setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC0,
-            "Scene control setting".to_string(),
-            "".to_string(),
+            "Scene control setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC1,
-            "Number that can assign scene control setting.".to_string(),
-            "number".to_string(),
+            "Number that can assign scene control setting.".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC2,
-            "Power consumption rate list".to_string(),
-            "array".to_string(),
+            "Power consumption rate list".to_string(),
+            "array".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC3,
-            "Power consumption when fully lighted".to_string(),
-            "number".to_string(),
+            "Power consumption when fully lighted".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC4,
-            "Possible power savings".to_string(),
-            "number".to_string(),
+            "Possible power savings".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC5,
-            "Power consumption limit setting".to_string(),
-            "".to_string(),
+            "Power consumption limit setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x30,
-            "true".to_string(),
-            "ON".to_string(),
+            "true".to_string(),
+            "ON".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x31,
-            "false".to_string(),
-            "OFF".to_string(),
+            "false".to_string(),
+            "OFF".to_string(),
         ));
         obj.add_standard_property(
             0xC6,
-            "Automatic operation controlling setting".to_string(),
-            "state".to_string(),
+            "Automatic operation controlling setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC7,
-            "Fading control change time setting".to_string(),
-            "number".to_string(),
+            "Fading control change time setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Temperature sensor (0x0011)
-        let mut obj = self.create_standard_object("Temperature sensor".to_string(), 0x00, 0x11);
+        let mut obj = self.create_standard_object("Temperature sensor".to_string(), 0x00, 0x11);
         obj.add_standard_property(
             0xE0,
-            "Measured temperature value".to_string(),
-            "number".to_string(),
+            "Measured temperature value".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Human detection sensor (0x0007)
-        let mut obj = self.create_standard_object("Human detection sensor".to_string(), 0x00, 0x07);
+        let mut obj = self.create_standard_object("Human detection sensor".to_string(), 0x00, 0x07);
         obj.add_standard_property(
             0xB0,
-            "Detection threshold level".to_string(),
-            "level".to_string(),
+            "Detection threshold level".to_string(),
+            "level".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "true".to_string(),
-            "Detected".to_string(),
+            "true".to_string(),
+            "Detected".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "false".to_string(),
-            "Not detected".to_string(),
+            "false".to_string(),
+            "Not detected".to_string(),
         ));
         obj.add_standard_property(
             0xB1,
-            "Human detection status".to_string(),
-            "state".to_string(),
+            "Human detection status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Refrigerator (0x03B7)
-        let mut obj = self.create_standard_object("Refrigerator".to_string(), 0x03, 0xB7);
+        let mut obj = self.create_standard_object("Refrigerator".to_string(), 0x03, 0xB7);
         obj.add_standard_property(
             0xA0,
-            "Quick freeze function setting".to_string(),
-            "state".to_string(),
+            "Quick freeze function setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xA1,
-            "Quick refrigeration function setting".to_string(),
-            "state".to_string(),
+            "Quick refrigeration function setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xA4,
-            "Icemaker setting".to_string(),
-            "state".to_string(),
+            "Icemaker setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xA5,
-            "Icemaker operation status".to_string(),
-            "state".to_string(),
+            "Icemaker operation status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xA6,
-            "Icemaker tank status".to_string(),
-            "state".to_string(),
+            "Icemaker tank status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xA8,
-            "Refrigerator compartment humidification function setting".to_string(),
-            "state".to_string(),
+            "Refrigerator compartment humidification function setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xA9,
-            "Vegetable compartment humidification function setting".to_string(),
-            "state".to_string(),
+            "Vegetable compartment humidification function setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xAD,
-            "Deodorization function setting".to_string(),
-            "state".to_string(),
+            "Deodorization function setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB0,
-            "Door open/close status".to_string(),
-            "state".to_string(),
+            "Door open/close status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required_o"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_o"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xB1,
-            "Door open warning".to_string(),
-            "state".to_string(),
+            "Door open warning".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "open".to_string(),
-            "Open".to_string(),
+            "open".to_string(),
+            "Open".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "close".to_string(),
-            "Closed".to_string(),
+            "close".to_string(),
+            "Closed".to_string(),
         ));
         obj.add_standard_property(
             0xB2,
-            "Refrigerator compartment door status".to_string(),
-            "state".to_string(),
+            "Refrigerator compartment door status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "open".to_string(),
-            "Open".to_string(),
+            "open".to_string(),
+            "Open".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "close".to_string(),
-            "Closed".to_string(),
+            "close".to_string(),
+            "Closed".to_string(),
         ));
         obj.add_standard_property(
             0xB3,
-            "Freezer compartment door status".to_string(),
-            "state".to_string(),
+            "Freezer compartment door status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "open".to_string(),
-            "Open".to_string(),
+            "open".to_string(),
+            "Open".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "close".to_string(),
-            "Closed".to_string(),
+            "close".to_string(),
+            "Closed".to_string(),
         ));
         obj.add_standard_property(
             0xB4,
-            "Ice compartment door status".to_string(),
-            "state".to_string(),
+            "Ice compartment door status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "open".to_string(),
-            "Open".to_string(),
+            "open".to_string(),
+            "Open".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "close".to_string(),
-            "Closed".to_string(),
+            "close".to_string(),
+            "Closed".to_string(),
         ));
         obj.add_standard_property(
             0xB5,
-            "Vegetable compartment door status".to_string(),
-            "state".to_string(),
+            "Vegetable compartment door status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         prop_enums.push(self.create_standard_property_enum(
             0x41,
-            "open".to_string(),
-            "Open".to_string(),
+            "open".to_string(),
+            "Open".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x42,
-            "close".to_string(),
-            "Closed".to_string(),
+            "close".to_string(),
+            "Closed".to_string(),
         ));
         obj.add_standard_property(
             0xB6,
-            "Multi-refrigerating mode compartment door status".to_string(),
-            "state".to_string(),
+            "Multi-refrigerating mode compartment door status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD1,
-            "Measured refrigerator compartment temperature".to_string(),
-            "number".to_string(),
+            "Measured refrigerator compartment temperature".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD2,
-            "Measured freezer compartment temperature".to_string(),
-            "number".to_string(),
+            "Measured freezer compartment temperature".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD3,
-            "Measured subzero-fresh compartment temperature".to_string(),
-            "number".to_string(),
+            "Measured subzero-fresh compartment temperature".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD4,
-            "Measured vegetable compartment temperature".to_string(),
-            "number".to_string(),
+            "Measured vegetable compartment temperature".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD5,
-            "Measured multi-refrigerating mode compartment temperature".to_string(),
-            "number".to_string(),
+            "Measured multi-refrigerating mode compartment temperature".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD8,
-            "Compressor rotation speed".to_string(),
-            "object".to_string(),
+            "Compressor rotation speed".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDA,
-            "Measured electric current consumption".to_string(),
-            "number".to_string(),
+            "Measured electric current consumption".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xDC,
-            "Rated power consumption".to_string(),
-            "number".to_string(),
+            "Rated power consumption".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE0,
-            "Maximum allowable temperature setting level".to_string(),
-            "object".to_string(),
+            "Maximum allowable temperature setting level".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE2,
-            "Refrigerator compartment temperature setting".to_string(),
-            "number".to_string(),
+            "Refrigerator compartment temperature setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE3,
-            "Freezer compartment temperature setting".to_string(),
-            "number".to_string(),
+            "Freezer compartment temperature setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE4,
-            "Ice compartment temperature setting".to_string(),
-            "number".to_string(),
+            "Ice compartment temperature setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE5,
-            "Vegetable compartment temperature setting".to_string(),
-            "number".to_string(),
+            "Vegetable compartment temperature setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE6,
-            "Multi-refrigerating mode compartment temperature setting".to_string(),
-            "number".to_string(),
+            "Multi-refrigerating mode compartment temperature setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE9,
-            "Refrigerator compartment temperature level setting".to_string(),
-            "number".to_string(),
+            "Refrigerator compartment temperature level setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEA,
-            "Freezer compartment temperature level setting".to_string(),
-            "number".to_string(),
+            "Freezer compartment temperature level setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEB,
-            "Ice compartment temperature level setting".to_string(),
-            "number".to_string(),
+            "Ice compartment temperature level setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEC,
-            "Vegetable compartment temperature level setting".to_string(),
-            "number".to_string(),
+            "Vegetable compartment temperature level setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xED,
-            "Multi-refrigerating mode compartment temperature level setting".to_string(),
-            "number".to_string(),
+            "Multi-refrigerating mode compartment temperature level setting".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Air cleaner (0x0135)
-        let mut obj = self.create_standard_object("Air cleaner".to_string(), 0x01, 0x35);
+        let mut obj = self.create_standard_object("Air cleaner".to_string(), 0x01, 0x35);
         prop_enums.push(self.create_standard_property_enum(
             0x30,
-            "true".to_string(),
-            "On".to_string(),
+            "true".to_string(),
+            "On".to_string(),
         ));
         prop_enums.push(self.create_standard_property_enum(
             0x31,
-            "false".to_string(),
-            "Off".to_string(),
+            "false".to_string(),
+            "Off".to_string(),
         ));
         obj.add_standard_property(
             0x80,
-            "Operation status".to_string(),
-            "state".to_string(),
+            "Operation status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
-            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("required"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xA0,
-            "Air flow rate setting".to_string(),
-            "".to_string(),
+            "Air flow rate setting".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC0,
-            "Air pollution detection status".to_string(),
-            "state".to_string(),
+            "Air pollution detection status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC1,
-            "Smoke (cigarette) detection status".to_string(),
-            "state".to_string(),
+            "Smoke (cigarette) detection status".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xC2,
-            "Optical catalyst operation setting".to_string(),
-            "state".to_string(),
+            "Optical catalyst operation setting".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE1,
-            "Filter change notice".to_string(),
-            "state".to_string(),
+            "Filter change notice".to_string(),
+            "state".to_string(),
             1,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         self.add_object(obj);
 
         // Low-voltage smart electric energy meter (0x0288)
         let mut obj = self.create_standard_object(
-            "Low-voltage smart electric energy meter".to_string(),
+            "Low-voltage smart electric energy meter".to_string(),
             0x02,
             0x88,
         );
         obj.add_standard_property(
             0xD3,
-            "Coefficient".to_string(),
-            "number".to_string(),
+            "Coefficient".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("optional"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("optional"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xD7,
-            "Number of effective digits for cumulative amounts of electric energy".to_string(),
-            "number".to_string(),
+            "Number of effective digits for cumulative amounts of electric energy".to_string(),
+            "number".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE0,
-            "Measured cumulative amount of electric energy (normal direction)".to_string(),
-            "".to_string(),
+            "Measured cumulative amount of electric energy (normal direction)".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE1,
-            "Unit for cumulative amounts of electric energy (normal and reverse directions)"
+            "Unit for cumulative amounts of electric energy (normal and reverse directions)"
                 .to_string(),
-            "numericValue".to_string(),
+            "numericValue".to_string(),
             1,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
-        obj.add_standard_property(0xE2, "Historical data of measured cumulative amounts of electric energy 1 (normal direction)".to_string(), "object".to_string(), 0, property_string_to_attribute("required"), property_string_to_attribute("notApplicable"), property_string_to_attribute("optional"), &mut prop_enums);
+        obj.add_standard_property(0xE2, "Historical data of measured cumulative amounts of electric energy 1 (normal direction)".to_string(), "object".to_string(), 0, property_string_to_attribute("required"), property_string_to_attribute("notApplicable"), property_string_to_attribute("optional"), &mut prop_enums);
         obj.add_standard_property(
             0xE3,
-            "Measured cumulative amount of electric energy (reverse direction)".to_string(),
-            "".to_string(),
+            "Measured cumulative amount of electric energy (reverse direction)".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
-        obj.add_standard_property(0xE4, "Historical data of measured cumulative amounts of electric energy 1 (reverse direction)".to_string(), "object".to_string(), 0, property_string_to_attribute("required_c"), property_string_to_attribute("notApplicable"), property_string_to_attribute("optional"), &mut prop_enums);
-        obj.add_standard_property(0xE5, "Day for which the historical data of measured cumulative amounts of electric energy is to be retrieved 1".to_string(), "".to_string(), 0, property_string_to_attribute("required"), property_string_to_attribute("required"), property_string_to_attribute("optional"), &mut prop_enums);
+        obj.add_standard_property(0xE4, "Historical data of measured cumulative amounts of electric energy 1 (reverse direction)".to_string(), "object".to_string(), 0, property_string_to_attribute("required_c"), property_string_to_attribute("notApplicable"), property_string_to_attribute("optional"), &mut prop_enums);
+        obj.add_standard_property(0xE5, "Day for which the historical data of measured cumulative amounts of electric energy is to be retrieved 1".to_string(), "".to_string(), 0, property_string_to_attribute("required"), property_string_to_attribute("required"), property_string_to_attribute("optional"), &mut prop_enums);
         obj.add_standard_property(
             0xE7,
-            "Measured instantaneous electric power".to_string(),
-            "".to_string(),
+            "Measured instantaneous electric power".to_string(),
+            "".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xE8,
-            "Measured instantaneous currents".to_string(),
-            "object".to_string(),
+            "Measured instantaneous currents".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEA,
-            "Cumulative amounts of electric energy measured at fixed time (normal direction)"
+            "Cumulative amounts of electric energy measured at fixed time (normal direction)"
                 .to_string(),
-            "object".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
         obj.add_standard_property(
             0xEB,
-            "Cumulative amounts of electric energy measured at fixed time (reverse direction)"
+            "Cumulative amounts of electric energy measured at fixed time (reverse direction)"
                 .to_string(),
-            "object".to_string(),
+            "object".to_string(),
             0,
-            property_string_to_attribute("required_c"),
-            property_string_to_attribute("notApplicable"),
-            property_string_to_attribute("optional"),
+            property_string_to_attribute("required_c"),
+            property_string_to_attribute("notApplicable"),
+            property_string_to_attribute("optional"),
             &mut prop_enums,
         );
-        obj.add_standard_property(0xEC, "Historical data of measured cumulative amounts of electric energy 2 (normal and reverse directions)".to_string(), "object".to_string(), 0, property_string_to_attribute("optional"), property_string_to_attribute("notApplicable"), property_string_to_attribute("optional"), &mut prop_enums);
-        obj.add_standard_property(0xED, "Day for which the historical data of measured cumulative amounts of electric energy is to be retrieved 2".to_string(), "object".to_string(), 0, property_string_to_attribute("optional"), property_string_to_attribute("optional"), property_string_to_attribute("optional"), &mut prop_enums);
+        obj.add_standard_property(0xEC, "Historical data of measured cumulative amounts of electric energy 2 (normal and reverse directions)".to_string(), "object".to_string(), 0, property_string_to_attribute("optional"), property_string_to_attribute("notApplicable"), property_string_to_attribute("optional"), &mut prop_enums);
+        obj.add_standard_property(0xED, "Day for which the historical data of measured cumulative amounts of electric energy is to be retrieved 2".to_string(), "object".to_string(), 0, property_string_to_attribute("optional"), property_string_to_attribute("optional"), property_string_to_attribute("optional"), &mut prop_enums);
         self.add_object(obj);
     }
 }
diff --git a/src/echonet/database_test.rs.html b/src/echonet/database_test.rs.html
index 1ae33af2..71d957bd 100644
--- a/src/echonet/database_test.rs.html
+++ b/src/echonet/database_test.rs.html
@@ -1,4 +1,6 @@
-database_test.rs - source
1
+database_test.rs - source
+    
1
 2
 3
 4
@@ -41,14 +43,14 @@
 41
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/device.rs.html b/src/echonet/device.rs.html
index d365f6c9..977e5112 100644
--- a/src/echonet/device.rs.html
+++ b/src/echonet/device.rs.html
@@ -1,4 +1,6 @@
-device.rs - source
1
+device.rs - source
+    
1
 2
 3
 4
@@ -296,14 +298,14 @@
 296
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
@@ -373,14 +375,14 @@
 
 pub const DEVICE_OPERATING_STATUS_ON: u8 = OBJECT_OPERATING_STATUS_ON;
 pub const DEVICE_OPERATING_STATUS_OFF: u8 = OBJECT_OPERATING_STATUS_OFF;
-pub const DEVICE_VERSION_APPENDIX_A: u8 = 'A' as u8;
-pub const DEVICE_VERSION_APPENDIX_B: u8 = 'B' as u8;
-pub const DEVICE_VERSION_APPENDIX_C: u8 = 'C' as u8;
-pub const DEVICE_VERSION_APPENDIX_D: u8 = 'D' as u8;
-pub const DEVICE_VERSION_APPENDIX_E: u8 = 'E' as u8;
-pub const DEVICE_VERSION_APPENDIX_F: u8 = 'F' as u8;
-pub const DEVICE_VERSION_APPENDIX_G: u8 = 'G' as u8;
-pub const DEVICE_VERSION_APPENDIX_P: u8 = 'P' as u8;
+pub const DEVICE_VERSION_APPENDIX_A: u8 = 'A' as u8;
+pub const DEVICE_VERSION_APPENDIX_B: u8 = 'B' as u8;
+pub const DEVICE_VERSION_APPENDIX_C: u8 = 'C' as u8;
+pub const DEVICE_VERSION_APPENDIX_D: u8 = 'D' as u8;
+pub const DEVICE_VERSION_APPENDIX_E: u8 = 'E' as u8;
+pub const DEVICE_VERSION_APPENDIX_F: u8 = 'F' as u8;
+pub const DEVICE_VERSION_APPENDIX_G: u8 = 'G' as u8;
+pub const DEVICE_VERSION_APPENDIX_P: u8 = 'P' as u8;
 pub const DEVICE_VERSION_UNKNOWN: u8 = 0;
 pub const DEVICE_DEFAULT_VERSION_APPENDIX: u8 = DEVICE_VERSION_APPENDIX_P;
 pub const DEVICE_FAULT_OCCURRED: u8 = 0x41;
@@ -487,7 +489,7 @@
         obj.set_code(code);
         obj.add_standard_properties(SUPER_OBJECT_CODE);
         if !obj.add_standard_properties(code) {
-            warn!("Standard object properties ({:06X}) are not found", code);
+            warn!("Standard object properties ({:06X}) are not found", code);
         }
         let mut dev_node = self.node.lock().unwrap();
         dev_node.add_object(obj);
diff --git a/src/echonet/device_node.rs.html b/src/echonet/device_node.rs.html
index 18643d35..8b883072 100644
--- a/src/echonet/device_node.rs.html
+++ b/src/echonet/device_node.rs.html
@@ -1,4 +1,6 @@
-device_node.rs - source
1
+device_node.rs - source
+    
1
 2
 3
 4
@@ -124,14 +126,14 @@
 124
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/device_test.rs.html b/src/echonet/device_test.rs.html
index 8da04296..e03186de 100644
--- a/src/echonet/device_test.rs.html
+++ b/src/echonet/device_test.rs.html
@@ -1,4 +1,6 @@
-device_test.rs - source
1
+device_test.rs - source
+    
1
 2
 3
 4
@@ -74,14 +76,14 @@
 74
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/error.rs.html b/src/echonet/error.rs.html
index f1a92389..5df8f932 100644
--- a/src/echonet/error.rs.html
+++ b/src/echonet/error.rs.html
@@ -1,4 +1,6 @@
-error.rs - source
1
+error.rs - source
+    
1
 2
 3
 4
@@ -13,14 +15,14 @@
 13
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/lib.rs.html b/src/echonet/lib.rs.html
index d6c83691..61748736 100644
--- a/src/echonet/lib.rs.html
+++ b/src/echonet/lib.rs.html
@@ -1,4 +1,6 @@
-lib.rs - source
1
+lib.rs - source
+    
1
 2
 3
 4
@@ -108,14 +110,14 @@
 108
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/log/logger.rs.html b/src/echonet/log/logger.rs.html
index 91453386..5d684b19 100644
--- a/src/echonet/log/logger.rs.html
+++ b/src/echonet/log/logger.rs.html
@@ -1,4 +1,6 @@
-logger.rs - source
1
+logger.rs - source
+    
1
 2
 3
 4
@@ -73,14 +75,14 @@
 73
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
@@ -108,7 +110,7 @@
         }
     }
 
-    pub fn shared() -> &'static Logger {
+    pub fn shared() -> &'static Logger {
         &LOGGER
     }
 
@@ -120,7 +122,7 @@
         INIT.call_once(|| {
             log::set_logger(&LOGGER)
                 .map(|()| log::set_max_level(LevelFilter::Trace))
-                .expect("Couldn't initialize logger");
+                .expect("Couldn't initialize logger");
         });
     }
 }
@@ -134,7 +136,7 @@
         if self.enabled(record.metadata()) {
             let ts = Local::now();
             println!(
-                "{} {} {}",
+                "{} {} {}",
                 ts.to_rfc3339_opts(SecondsFormat::Secs, true),
                 record.level(),
                 record.args()
diff --git a/src/echonet/log/mod.rs.html b/src/echonet/log/mod.rs.html
index f62dbf9a..99c8cd1a 100644
--- a/src/echonet/log/mod.rs.html
+++ b/src/echonet/log/mod.rs.html
@@ -1,4 +1,6 @@
-mod.rs - source
1
+mod.rs - source
+    
1
 2
 3
 4
@@ -17,14 +19,14 @@
 17
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/manufacture.rs.html b/src/echonet/manufacture.rs.html
index c9663bbf..44b15448 100644
--- a/src/echonet/manufacture.rs.html
+++ b/src/echonet/manufacture.rs.html
@@ -1,4 +1,6 @@
-manufacture.rs - source
1
+manufacture.rs - source
+    
1
 2
 3
 4
@@ -47,14 +49,14 @@
 47
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
@@ -72,7 +74,7 @@
     pub fn new() -> Manufacture {
         Manufacture {
             code: 0,
-            name: String::from(""),
+            name: String::from(""),
         }
     }
 
diff --git a/src/echonet/message.rs.html b/src/echonet/message.rs.html
index 36bb510a..409abf73 100644
--- a/src/echonet/message.rs.html
+++ b/src/echonet/message.rs.html
@@ -1,4 +1,6 @@
-message.rs - source
1
+message.rs - source
+    
1
 2
 3
 4
@@ -196,14 +198,14 @@
 196
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
@@ -331,13 +333,13 @@
     }
 }
 
-pub struct NodeProfileMessage<'a> {
+pub struct NodeProfileMessage<'a> {
     obj_codes: Vec<ObjectCode>,
-    msg: &'a Message,
+    msg: &'a Message,
 }
 
-impl NodeProfileMessage<'_> {
-    pub fn from_message<'a>(msg: &'a Message) -> NodeProfileMessage<'a> {
+impl NodeProfileMessage<'_> {
+    pub fn from_message<'a>(msg: &'a Message) -> NodeProfileMessage<'a> {
         NodeProfileMessage {
             msg: msg,
             obj_codes: Vec::new(),
diff --git a/src/echonet/message_test.rs.html b/src/echonet/message_test.rs.html
index f99ac9d6..fa47e04d 100644
--- a/src/echonet/message_test.rs.html
+++ b/src/echonet/message_test.rs.html
@@ -1,4 +1,6 @@
-message_test.rs - source
1
+message_test.rs - source
+    
1
 2
 3
 4
@@ -59,14 +61,14 @@
 59
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
@@ -85,14 +87,14 @@
         let msg = SearchMessage::new();
         assert_eq!(
             msg.bytes(),
-            hex::decode("108100000EF0010EF0016201D600").ok().unwrap()
+            hex::decode("108100000EF0010EF0016201D600").ok().unwrap()
         )
     }
 
     #[test]
     fn node_profile_message() {
         let msg =
-            Message::from_bytes(&hex::decode("108100010EF0010EF0017201D6040105FF01").unwrap());
+            Message::from_bytes(&hex::decode("108100010EF0010EF0017201D6040105FF01").unwrap());
         let mut profile_msg = NodeProfileMessage::from_message(&msg);
         assert!(profile_msg.parse());
         assert_eq!(profile_msg.object_codes().len(), 1);
@@ -101,7 +103,7 @@
     #[test]
     fn response_message() {
         let req_msg =
-            Message::from_bytes(&hex::decode("108100330EF0010EF0016201D600").ok().unwrap());
+            Message::from_bytes(&hex::decode("108100330EF0010EF0016201D600").ok().unwrap());
         let res_msg = ResponseMessage::from(&req_msg);
         assert_eq!(res_msg.esv(), ESV::ReadResponse);
         assert_eq!(res_msg.tid(), 0x0033);
@@ -110,7 +112,7 @@
     #[test]
     fn error_response_message() {
         let req_msg =
-            Message::from_bytes(&hex::decode("108100330EF0010EF0016201D600").ok().unwrap());
+            Message::from_bytes(&hex::decode("108100330EF0010EF0016201D600").ok().unwrap());
         let res_msg = ResponseErrorMessage::from(&req_msg);
         assert_eq!(res_msg.esv(), ESV::ReadRequestError);
         assert_eq!(res_msg.tid(), 0x0033);
diff --git a/src/echonet/node.rs.html b/src/echonet/node.rs.html
index a4983b93..37ad617a 100644
--- a/src/echonet/node.rs.html
+++ b/src/echonet/node.rs.html
@@ -1,4 +1,6 @@
-node.rs - source
1
+node.rs - source
+    
1
 2
 3
 4
@@ -497,14 +499,14 @@
 497
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
@@ -738,7 +740,7 @@
         match self.post_sender.send(msg) {
             Ok(()) => {}
             Err(_err) => {
-                // warn!("{}", err);
+                // warn!("{}", err);
             }
         }
         let (tx, _): (Sender<Message>, Receiver<Message>) = mpsc::channel();
@@ -959,7 +961,7 @@
                     node.notify(&mut res_msg);
                 }
             } else {
-                warn!("invalid ESV response ({}): {}", res_msg.esv(), res_msg)
+                warn!("invalid ESV response ({}): {}", res_msg.esv(), res_msg)
             }
         }
     }
diff --git a/src/echonet/node_profile.rs.html b/src/echonet/node_profile.rs.html
index 3e262f48..5ab3ce0d 100644
--- a/src/echonet/node_profile.rs.html
+++ b/src/echonet/node_profile.rs.html
@@ -1,4 +1,6 @@
-node_profile.rs - source
1
+node_profile.rs - source
+    
1
 2
 3
 4
@@ -143,14 +145,14 @@
 143
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
@@ -199,11 +201,11 @@
 pub const NODE_PROFILE_CLASS_NOT_BOOTING: u8 = 0x31;
 pub const LOWER_COMMUNICATION_LAYER_PROTOCOL_TYPE: u8 = 0xFE;
 
-pub struct NodeProfile<'a> {
-    obj: &'a mut Object,
+pub struct NodeProfile<'a> {
+    obj: &'a mut Object,
 }
 
-impl NodeProfile<'_> {
+impl NodeProfile<'_> {
     pub fn new() -> Object {
         let mut obj = Object::new();
         obj.set_code(NODE_PROFILE_OBJECT_CODE);
diff --git a/src/echonet/node_profile_test.rs.html b/src/echonet/node_profile_test.rs.html
index e15ecc2d..9b04e2c5 100644
--- a/src/echonet/node_profile_test.rs.html
+++ b/src/echonet/node_profile_test.rs.html
@@ -1,4 +1,6 @@
-node_profile_test.rs - source
1
+node_profile_test.rs - source
+    
1
 2
 3
 4
@@ -34,14 +36,14 @@
 34
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/node_test.rs.html b/src/echonet/node_test.rs.html
index a6b64c96..4a848078 100644
--- a/src/echonet/node_test.rs.html
+++ b/src/echonet/node_test.rs.html
@@ -1,4 +1,6 @@
-node_test.rs - source
1
+node_test.rs - source
+    
1
 2
 3
 4
@@ -40,14 +42,14 @@
 40
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/object.rs.html b/src/echonet/object.rs.html
index 499f33f5..c8405d15 100644
--- a/src/echonet/object.rs.html
+++ b/src/echonet/object.rs.html
@@ -1,4 +1,6 @@
-object.rs - source
1
+object.rs - source
+    
1
 2
 3
 4
@@ -377,14 +379,14 @@
 377
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
@@ -418,8 +420,8 @@
     pub fn new() -> Object {
         Object {
             codes: [0, 0, 0],
-            name: String::from(""),
-            class_name: String::from(""),
+            name: String::from(""),
+            class_name: String::from(""),
             properties: HashMap::new(),
         }
     }
@@ -497,7 +499,7 @@
         true
     }
 
-    pub fn properties(&self) -> Values<'_, PropertyCode, Property> {
+    pub fn properties(&self) -> Values<'_, PropertyCode, Property> {
         self.properties.values()
     }
 
@@ -615,7 +617,7 @@
 
     fn update_property_maps(&mut self) {
         // Annex 1 Property Map Description Format
-        fn to_property_map_bytes<'a>(maps: &'a Vec<u8>, map_bytes: &'a mut Vec<u8>) -> &'a [u8] {
+        fn to_property_map_bytes<'a>(maps: &'a Vec<u8>, map_bytes: &'a mut Vec<u8>) -> &'a [u8] {
             map_bytes.clear();
             map_bytes.push(maps.len() as u8);
             if maps.len() <= OBJECT_PROPERTY_MAP_FORMAT1_MAX_SIZE {
diff --git a/src/echonet/object_test.rs.html b/src/echonet/object_test.rs.html
index 85d32d8b..c49e8b18 100644
--- a/src/echonet/object_test.rs.html
+++ b/src/echonet/object_test.rs.html
@@ -1,4 +1,6 @@
-object_test.rs - source
1
+object_test.rs - source
+    
1
 2
 3
 4
@@ -46,14 +48,14 @@
 46
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/profile.rs.html b/src/echonet/profile.rs.html
index 8b801cf3..d15b1323 100644
--- a/src/echonet/profile.rs.html
+++ b/src/echonet/profile.rs.html
@@ -1,4 +1,6 @@
-profile.rs - source
1
+profile.rs - source
+    
1
 2
 3
 4
@@ -49,14 +51,14 @@
 49
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/profile_test.rs.html b/src/echonet/profile_test.rs.html
index da37633d..e84b01da 100644
--- a/src/echonet/profile_test.rs.html
+++ b/src/echonet/profile_test.rs.html
@@ -1,4 +1,6 @@
-profile_test.rs - source
1
+profile_test.rs - source
+    
1
 2
 3
 4
@@ -24,14 +26,14 @@
 24
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/property.rs.html b/src/echonet/property.rs.html
index dbef4fd2..7ec5a3d0 100644
--- a/src/echonet/property.rs.html
+++ b/src/echonet/property.rs.html
@@ -1,4 +1,6 @@
-property.rs - source
1
+property.rs - source
+    
1
 2
 3
 4
@@ -415,14 +417,14 @@
 415
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
@@ -471,8 +473,8 @@
     pub fn new() -> PropertyEnum {
         PropertyEnum {
             code: 0,
-            name: String::from(""),
-            desc: String::from(""),
+            name: String::from(""),
+            desc: String::from(""),
         }
     }
 
@@ -541,18 +543,18 @@
 impl PropertyType {
     pub fn from_string(typ: String) -> PropertyType {
         match typ.as_str() {
-            "number" => PropertyType::Number,
-            "state" => PropertyType::State,
-            "numericValue" => PropertyType::NumericValue,
-            "level" => PropertyType::Level,
-            "date" => PropertyType::Date,
-            "date-time" => PropertyType::DateTime,
-            "time" => PropertyType::Time,
-            "raw" => PropertyType::Raw,
-            "bitmap" => PropertyType::Bitmap,
-            "array" => PropertyType::Array,
-            "object" => PropertyType::Object,
-            "oneOf" => PropertyType::OneOf,
+            "number" => PropertyType::Number,
+            "state" => PropertyType::State,
+            "numericValue" => PropertyType::NumericValue,
+            "level" => PropertyType::Level,
+            "date" => PropertyType::Date,
+            "date-time" => PropertyType::DateTime,
+            "time" => PropertyType::Time,
+            "raw" => PropertyType::Raw,
+            "bitmap" => PropertyType::Bitmap,
+            "array" => PropertyType::Array,
+            "object" => PropertyType::Object,
+            "oneOf" => PropertyType::OneOf,
             _ => PropertyType::Unknown,
         }
     }
@@ -576,8 +578,8 @@
         Property {
             code: 0,
             data: Vec::new(),
-            name: String::from(""),
-            typ: String::from(""),
+            name: String::from(""),
+            typ: String::from(""),
             capacity: 0,
             read_attr: PropertyRule::Prohibited,
             write_attr: PropertyRule::Prohibited,
@@ -788,7 +790,7 @@
         true
     }
 
-    pub fn enums(&self) -> Values<'_, PropertyEnumCode, PropertyEnum> {
+    pub fn enums(&self) -> Values<'_, PropertyEnumCode, PropertyEnum> {
         self.enums.values()
     }
 
diff --git a/src/echonet/property_test.rs.html b/src/echonet/property_test.rs.html
index e60398e8..3a12e96d 100644
--- a/src/echonet/property_test.rs.html
+++ b/src/echonet/property_test.rs.html
@@ -1,4 +1,6 @@
-property_test.rs - source
1
+property_test.rs - source
+    
1
 2
 3
 4
@@ -41,14 +43,14 @@
 41
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/protocol/error.rs.html b/src/echonet/protocol/error.rs.html
index 1911ef20..37267e0b 100644
--- a/src/echonet/protocol/error.rs.html
+++ b/src/echonet/protocol/error.rs.html
@@ -1,4 +1,6 @@
-error.rs - source
1
+error.rs - source
+    
1
 2
 3
 4
@@ -39,14 +41,14 @@
 39
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
@@ -71,7 +73,7 @@
 
 impl fmt::Display for ProtocolError {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        write!(f, "{} (offset:{})", self.message, self.offset)
+        write!(f, "{} (offset:{})", self.message, self.offset)
     }
 }
 
diff --git a/src/echonet/protocol/esv.rs.html b/src/echonet/protocol/esv.rs.html
index aa403a39..9201f9ca 100644
--- a/src/echonet/protocol/esv.rs.html
+++ b/src/echonet/protocol/esv.rs.html
@@ -1,4 +1,6 @@
-esv.rs - source
1
+esv.rs - source
+    
1
 2
 3
 4
@@ -119,14 +121,14 @@
 119
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
@@ -229,7 +231,7 @@
 impl fmt::Display for ESV {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
         let code = *self as u8;
-        let res = f.write_fmt(format_args!("{:02X}", code));
+        let res = f.write_fmt(format_args!("{:02X}", code));
         if res.is_err() {
             return res;
         }
diff --git a/src/echonet/protocol/esv_test.rs.html b/src/echonet/protocol/esv_test.rs.html
index 3e7fecbf..e11d0f19 100644
--- a/src/echonet/protocol/esv_test.rs.html
+++ b/src/echonet/protocol/esv_test.rs.html
@@ -1,4 +1,6 @@
-esv_test.rs - source
1
+esv_test.rs - source
+    
1
 2
 3
 4
@@ -28,14 +30,14 @@
 28
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/protocol/message.rs.html b/src/echonet/protocol/message.rs.html
index a078dfd9..d3c1776b 100644
--- a/src/echonet/protocol/message.rs.html
+++ b/src/echonet/protocol/message.rs.html
@@ -1,4 +1,6 @@
-message.rs - source
1
+message.rs - source
+    
1
 2
 3
 4
@@ -387,14 +389,14 @@
 387
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
@@ -435,17 +437,17 @@
 ///     ESV::WriteReadRequest | ESV::WriteReadResponse | ESV::WriteReadRequestError => {
 ///         let opc = msg.opc_set();
 ///         for (n, prop) in msg.properties_set().iter().enumerate() {
-///             println!("[{}] {}", n, hex::encode(prop.data()));
+///             println!("[{}] {}", n, hex::encode(prop.data()));
 ///         }
 ///         let opc = msg.opc_get();
 ///         for (n, prop) in msg.properties_get().iter().enumerate() {
-///             println!("[{}] {}", n, hex::encode(prop.data()));
+///             println!("[{}] {}", n, hex::encode(prop.data()));
 ///         }
 ///     }
 ///     _ => {
 ///         let opc = msg.opc();
 ///         for (n, prop) in msg.properties().iter().enumerate() {
-///             println!("[{}] {}", n, hex::encode(prop.data()));
+///             println!("[{}] {}", n, hex::encode(prop.data()));
 ///         }
 ///     }
 /// }
@@ -764,7 +766,7 @@
 impl fmt::Display for Message {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
         for b in self.bytes() {
-            let res = f.write_fmt(format_args!("{:02X}", b));
+            let res = f.write_fmt(format_args!("{:02X}", b));
             if res.is_err() {
                 return res;
             }
diff --git a/src/echonet/protocol/message_handler.rs.html b/src/echonet/protocol/message_handler.rs.html
index 21c71fe2..181881ba 100644
--- a/src/echonet/protocol/message_handler.rs.html
+++ b/src/echonet/protocol/message_handler.rs.html
@@ -1,4 +1,6 @@
-message_handler.rs - source
1
+message_handler.rs - source
+    
1
 2
 3
 4
@@ -19,14 +21,14 @@
 19
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/protocol/message_test.rs.html b/src/echonet/protocol/message_test.rs.html
index 9031f46d..d1f769a5 100644
--- a/src/echonet/protocol/message_test.rs.html
+++ b/src/echonet/protocol/message_test.rs.html
@@ -1,4 +1,6 @@
-message_test.rs - source
1
+message_test.rs - source
+    
1
 2
 3
 4
@@ -142,14 +144,14 @@
 142
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
@@ -195,7 +197,7 @@
 
             let mut msg = Message::new();
 
-            assert!(msg.parse(msg_bytes), "{}", hex::encode_upper(msg_bytes));
+            assert!(msg.parse(msg_bytes), "{}", hex::encode_upper(msg_bytes));
             assert_eq!(msg.tid(), 0x0101);
             assert_eq!(msg.seoj(), 0x0A0B0C0);
             assert_eq!(msg.deoj(), 0x0D0E0F0);
@@ -262,13 +264,13 @@
     #[test]
     fn message_parse_requests() {
         let mut test_msgs = Vec::new();
-        test_msgs.push(hex::decode("1081000100F00100F0016201D600").ok().unwrap());
+        test_msgs.push(hex::decode("1081000100F00100F0016201D600").ok().unwrap());
 
         for test_msg_bytes in test_msgs {
             let mut msg = Message::new();
             assert!(
                 msg.parse(&test_msg_bytes),
-                "{}",
+                "{}",
                 hex::encode_upper(&test_msg_bytes)
             );
         }
@@ -276,7 +278,7 @@
 
     #[test]
     fn message_from_message() {
-        let msg_bytes = hex::decode("108100010EF0010EF0017201D607020F2001029101")
+        let msg_bytes = hex::decode("108100010EF0010EF0017201D607020F2001029101")
             .ok()
             .unwrap();
         let _msg = Message::from_bytes(&msg_bytes);
diff --git a/src/echonet/protocol/mod.rs.html b/src/echonet/protocol/mod.rs.html
index fe14aab2..7941380d 100644
--- a/src/echonet/protocol/mod.rs.html
+++ b/src/echonet/protocol/mod.rs.html
@@ -1,4 +1,6 @@
-mod.rs - source
1
+mod.rs - source
+    
1
 2
 3
 4
@@ -29,14 +31,14 @@
 29
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/protocol/property.rs.html b/src/echonet/protocol/property.rs.html
index 5347525e..e84ebe05 100644
--- a/src/echonet/protocol/property.rs.html
+++ b/src/echonet/protocol/property.rs.html
@@ -1,4 +1,6 @@
-property.rs - source
1
+property.rs - source
+    
1
 2
 3
 4
@@ -114,14 +116,14 @@
 114
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/protocol/property_test.rs.html b/src/echonet/protocol/property_test.rs.html
index 63661020..35989e63 100644
--- a/src/echonet/protocol/property_test.rs.html
+++ b/src/echonet/protocol/property_test.rs.html
@@ -1,4 +1,6 @@
-property_test.rs - source
1
+property_test.rs - source
+    
1
 2
 3
 4
@@ -33,14 +35,14 @@
 33
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/protocol/result.rs.html b/src/echonet/protocol/result.rs.html
index d6aab0ac..83567f42 100644
--- a/src/echonet/protocol/result.rs.html
+++ b/src/echonet/protocol/result.rs.html
@@ -1,4 +1,6 @@
-result.rs - source
1
+result.rs - source
+    
1
 2
 3
 4
@@ -18,14 +20,14 @@
 18
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/remote_node.rs.html b/src/echonet/remote_node.rs.html
index 1d8ae983..5b4ca41c 100644
--- a/src/echonet/remote_node.rs.html
+++ b/src/echonet/remote_node.rs.html
@@ -1,4 +1,6 @@
-remote_node.rs - source
1
+remote_node.rs - source
+    
1
 2
 3
 4
@@ -116,14 +118,14 @@
 116
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/remote_node_test.rs.html b/src/echonet/remote_node_test.rs.html
index d24b8f73..4be169a5 100644
--- a/src/echonet/remote_node_test.rs.html
+++ b/src/echonet/remote_node_test.rs.html
@@ -1,4 +1,6 @@
-remote_node_test.rs - source
1
+remote_node_test.rs - source
+    
1
 2
 3
 4
@@ -30,14 +32,14 @@
 30
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/request_handler.rs.html b/src/echonet/request_handler.rs.html
index c64a961b..7dcfb0f9 100644
--- a/src/echonet/request_handler.rs.html
+++ b/src/echonet/request_handler.rs.html
@@ -1,4 +1,6 @@
-request_handler.rs - source
1
+request_handler.rs - source
+    
1
 2
 3
 4
@@ -133,14 +135,14 @@
 133
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/super_object.rs.html b/src/echonet/super_object.rs.html
index d7821feb..50fd762f 100644
--- a/src/echonet/super_object.rs.html
+++ b/src/echonet/super_object.rs.html
@@ -1,4 +1,6 @@
-super_object.rs - source
1
+super_object.rs - source
+    
1
 2
 3
 4
@@ -108,14 +110,14 @@
 108
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/transport/default.rs.html b/src/echonet/transport/default.rs.html
index c4645847..06827b05 100644
--- a/src/echonet/transport/default.rs.html
+++ b/src/echonet/transport/default.rs.html
@@ -1,4 +1,6 @@
-default.rs - source
1
+default.rs - source
+    
1
 2
 3
 4
@@ -20,14 +22,14 @@
 20
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/transport/error.rs.html b/src/echonet/transport/error.rs.html
index fcbcd870..b38f41c4 100644
--- a/src/echonet/transport/error.rs.html
+++ b/src/echonet/transport/error.rs.html
@@ -1,4 +1,6 @@
-error.rs - source
1
+error.rs - source
+    
1
 2
 3
 4
@@ -30,14 +32,14 @@
 30
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
@@ -55,7 +57,7 @@
 
 impl BindError {
     pub fn new() -> Error {
-        ScoketError::new("socket is not bound")
+        ScoketError::new("socket is not bound")
     }
 }
 
\ No newline at end of file diff --git a/src/echonet/transport/interface.rs.html b/src/echonet/transport/interface.rs.html index 817cfd83..0031ac0a 100644 --- a/src/echonet/transport/interface.rs.html +++ b/src/echonet/transport/interface.rs.html @@ -1,4 +1,6 @@ -interface.rs - source
1
+interface.rs - source
+    
1
 2
 3
 4
@@ -25,14 +27,14 @@
 25
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
@@ -42,7 +44,7 @@
 
 use std::net::{IpAddr, Ipv4Addr};
 
-#[cfg(not(feature = "unix"))]
+#[cfg(not(feature = "unix"))]
 pub fn get_all_interfaces() -> Vec<IpAddr> {
     let mut ifaddrs = Vec::new();
     ifaddrs.push(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)));
diff --git a/src/echonet/transport/interface_unix.rs.html b/src/echonet/transport/interface_unix.rs.html
index 4211d558..d34770c9 100644
--- a/src/echonet/transport/interface_unix.rs.html
+++ b/src/echonet/transport/interface_unix.rs.html
@@ -1,4 +1,6 @@
-interface_unix.rs - source
1
+interface_unix.rs - source
+    
1
 2
 3
 4
@@ -92,14 +94,14 @@
 92
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
@@ -107,42 +109,42 @@
 #![allow(dead_code)]
 #![allow(unused_imports)]
 
-#[cfg(feature = "unix")]
+#[cfg(feature = "unix")]
 use pnet::datalink;
-#[cfg(feature = "unix")]
+#[cfg(feature = "unix")]
 use pnet::ipnetwork;
 
 use std::net::IpAddr;
 
-#[cfg(feature = "unix")]
+#[cfg(feature = "unix")]
 type EnableInterface = fn(ipnetwork::IpNetwork) -> bool;
 
-#[cfg(feature = "unix")]
+#[cfg(feature = "unix")]
 fn is_ignore_interface(ipnet: ipnetwork::IpNetwork) -> bool {
     let binding = ipnet.to_string();
     let ifaddr = binding.as_str();
     match ifaddr {
-        "172.17.0.1/16" => return true, // Docker default gateway
+        "172.17.0.1/16" => return true, // Docker default gateway
         _ => return false,
     }
 }
 
-#[cfg(feature = "unix")]
+#[cfg(feature = "unix")]
 fn is_all_interface(_ipnet: ipnetwork::IpNetwork) -> bool {
     true
 }
 
-#[cfg(feature = "unix")]
+#[cfg(feature = "unix")]
 fn is_v4_interface(ipnet: ipnetwork::IpNetwork) -> bool {
     ipnet.is_ipv4()
 }
 
-#[cfg(feature = "unix")]
+#[cfg(feature = "unix")]
 fn is_v6_interface(ipnet: ipnetwork::IpNetwork) -> bool {
     ipnet.is_ipv6()
 }
 
-#[cfg(feature = "unix")]
+#[cfg(feature = "unix")]
 fn get_interfaces(enable_interface: EnableInterface) -> Vec<IpAddr> {
     let mut ifaddrs = Vec::new();
     for iface in datalink::interfaces() {
@@ -168,17 +170,17 @@
     ifaddrs
 }
 
-#[cfg(feature = "unix")]
+#[cfg(feature = "unix")]
 pub fn get_all_interfaces() -> Vec<IpAddr> {
     get_interfaces(is_v4_interface)
 }
 
-#[cfg(feature = "unix")]
+#[cfg(feature = "unix")]
 pub fn get_v4_interfaces() -> Vec<IpAddr> {
     get_interfaces(is_v4_interface)
 }
 
-#[cfg(feature = "unix")]
+#[cfg(feature = "unix")]
 pub fn get_v6_interfaces() -> Vec<IpAddr> {
     get_interfaces(is_v6_interface)
 }
diff --git a/src/echonet/transport/interface_unix_test.rs.html b/src/echonet/transport/interface_unix_test.rs.html
index 5cbbb9e3..c11264aa 100644
--- a/src/echonet/transport/interface_unix_test.rs.html
+++ b/src/echonet/transport/interface_unix_test.rs.html
@@ -1,4 +1,6 @@
-interface_unix_test.rs - source
1
+interface_unix_test.rs - source
+    
1
 2
 3
 4
@@ -44,19 +46,19 @@
 44
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#[cfg(feature = "unix")]
+#[cfg(feature = "unix")]
 #[cfg(test)]
 mod tests {
 
diff --git a/src/echonet/transport/manager.rs.html b/src/echonet/transport/manager.rs.html
index 5f44886b..85e9400e 100644
--- a/src/echonet/transport/manager.rs.html
+++ b/src/echonet/transport/manager.rs.html
@@ -1,4 +1,6 @@
-manager.rs - source
1
+manager.rs - source
+    
1
 2
 3
 4
@@ -97,14 +99,14 @@
 97
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/transport/manager_test.rs.html b/src/echonet/transport/manager_test.rs.html
index 505c3aaf..71f20c24 100644
--- a/src/echonet/transport/manager_test.rs.html
+++ b/src/echonet/transport/manager_test.rs.html
@@ -1,4 +1,6 @@
-manager_test.rs - source
1
+manager_test.rs - source
+    
1
 2
 3
 4
@@ -26,14 +28,14 @@
 26
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/transport/mod.rs.html b/src/echonet/transport/mod.rs.html
index 7e580198..b594f689 100644
--- a/src/echonet/transport/mod.rs.html
+++ b/src/echonet/transport/mod.rs.html
@@ -1,4 +1,6 @@
-mod.rs - source
1
+mod.rs - source
+    
1
 2
 3
 4
@@ -41,14 +43,14 @@
 41
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/transport/multicast_manager.rs.html b/src/echonet/transport/multicast_manager.rs.html
index afc38396..b2983c0a 100644
--- a/src/echonet/transport/multicast_manager.rs.html
+++ b/src/echonet/transport/multicast_manager.rs.html
@@ -1,4 +1,6 @@
-multicast_manager.rs - source
1
+multicast_manager.rs - source
+    
1
 2
 3
 4
@@ -113,14 +115,14 @@
 113
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
@@ -129,10 +131,10 @@
 
 use std::net::IpAddr;
 
-#[cfg(feature = "unix")]
+#[cfg(feature = "unix")]
 use crate::transport::interface_unix::*;
 
-#[cfg(not(feature = "unix"))]
+#[cfg(not(feature = "unix"))]
 use crate::transport::interface::*;
 
 use crate::protocol::Message;
diff --git a/src/echonet/transport/multicast_manager_test.rs.html b/src/echonet/transport/multicast_manager_test.rs.html
index 739bcad7..7372c436 100644
--- a/src/echonet/transport/multicast_manager_test.rs.html
+++ b/src/echonet/transport/multicast_manager_test.rs.html
@@ -1,4 +1,6 @@
-multicast_manager_test.rs - source
1
+multicast_manager_test.rs - source
+    
1
 2
 3
 4
@@ -26,14 +28,14 @@
 26
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/transport/multicast_server.rs.html b/src/echonet/transport/multicast_server.rs.html
index 74033652..466d5a16 100644
--- a/src/echonet/transport/multicast_server.rs.html
+++ b/src/echonet/transport/multicast_server.rs.html
@@ -1,4 +1,6 @@
-multicast_server.rs - source
1
+multicast_server.rs - source
+    
1
 2
 3
 4
@@ -182,14 +184,14 @@
 182
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
@@ -226,13 +228,13 @@
     }
 
     pub fn notify(&self, msg: &Message) -> bool {
-        let to_addr_str = format!("{}:{}", MULTICAST_V4_ADDRESS, PORT);
+        let to_addr_str = format!("{}:{}", MULTICAST_V4_ADDRESS, PORT);
         let to_addr: SocketAddr = to_addr_str.parse().unwrap();
         let msg_bytes = msg.bytes();
         let addr = to_addr.ip();
         let port = to_addr.port();
         info!(
-            "MCST {} -> {}:{} ({})",
+            "MCST {} -> {}:{} ({})",
             self.socket.read().unwrap().local_addr().unwrap(),
             addr,
             port,
@@ -245,7 +247,7 @@
             .send_to(&msg_bytes, to_addr)
             .is_err()
         {
-            warn!("Couldn't notify message to {} {}", addr, port);
+            warn!("Couldn't notify message to {} {}", addr, port);
             return false;
         }
         true
@@ -260,7 +262,7 @@
         if ifaddr.is_ipv6() {
             addr = SocketAddr::new(IpAddr::V6(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0)), PORT);
         }
-        debug!("BIND MCT {}", addr);
+        debug!("BIND MCT {}", addr);
         if self.socket.write().unwrap().bind(addr).is_err() {
             return false;
         }
@@ -277,7 +279,7 @@
                     return false;
                 }
                 debug!(
-                    "BIND MCT {}:{} -> {}:{}",
+                    "BIND MCT {}:{} -> {}:{}",
                     ifaddr, PORT, MULTICAST_V4_ADDRESS, ip4
                 );
             }
@@ -293,7 +295,7 @@
                     return false;
                 }
                 debug!(
-                    "BIND MCT {}:{} -> {}:{}",
+                    "BIND MCT {}:{} -> {}:{}",
                     ifaddr, PORT, MULTICAST_V6_ADDRESS, ip6
                 );
             }
@@ -319,7 +321,7 @@
                         let mut msg = Message::new();
                         if !msg.parse(recv_msg) {
                             warn!(
-                                "Couldn't parse message {} [{}] {}",
+                                "Couldn't parse message {} [{}] {}",
                                 remote_addr,
                                 n_bytes,
                                 hex::encode_upper(recv_msg)
@@ -327,7 +329,7 @@
                             continue;
                         }
                         info!(
-                            "RECV {} -> {} ({})",
+                            "RECV {} -> {} ({})",
                             remote_addr,
                             socket.read().unwrap().local_addr().ok().unwrap(),
                             msg
@@ -337,7 +339,7 @@
                     }
                     Err(e) => {
                         warn!(
-                            "RECV {} ({})",
+                            "RECV {} ({})",
                             socket.read().unwrap().local_addr().ok().unwrap(),
                             e
                         );
diff --git a/src/echonet/transport/multicast_server_test.rs.html b/src/echonet/transport/multicast_server_test.rs.html
index 56502915..58d15f20 100644
--- a/src/echonet/transport/multicast_server_test.rs.html
+++ b/src/echonet/transport/multicast_server_test.rs.html
@@ -1,4 +1,6 @@
-multicast_server_test.rs - source
1
+multicast_server_test.rs - source
+    
1
 2
 3
 4
@@ -76,14 +78,14 @@
 76
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
@@ -96,10 +98,10 @@
     use std::thread;
     use std::time;
 
-    #[cfg(feature = "unix")]
+    #[cfg(feature = "unix")]
     use crate::transport::interface_unix::*;
 
-    #[cfg(not(feature = "unix"))]
+    #[cfg(not(feature = "unix"))]
     use crate::transport::interface::*;
 
     use crate::protocol::Message;
diff --git a/src/echonet/transport/notifier.rs.html b/src/echonet/transport/notifier.rs.html
index 623a4ef2..79b53d9c 100644
--- a/src/echonet/transport/notifier.rs.html
+++ b/src/echonet/transport/notifier.rs.html
@@ -1,4 +1,6 @@
-notifier.rs - source
1
+notifier.rs - source
+    
1
 2
 3
 4
@@ -25,14 +27,14 @@
 25
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/transport/notify_manager.rs.html b/src/echonet/transport/notify_manager.rs.html
index 29eee1a8..923024a8 100644
--- a/src/echonet/transport/notify_manager.rs.html
+++ b/src/echonet/transport/notify_manager.rs.html
@@ -1,4 +1,6 @@
-notify_manager.rs - source
1
+notify_manager.rs - source
+    
1
 2
 3
 4
@@ -67,14 +69,14 @@
 67
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/transport/notify_manager_test.rs.html b/src/echonet/transport/notify_manager_test.rs.html
index 33b52f58..e18eecd0 100644
--- a/src/echonet/transport/notify_manager_test.rs.html
+++ b/src/echonet/transport/notify_manager_test.rs.html
@@ -1,4 +1,6 @@
-notify_manager_test.rs - source
1
+notify_manager_test.rs - source
+    
1
 2
 3
 4
@@ -80,14 +82,14 @@
 80
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/transport/observer.rs.html b/src/echonet/transport/observer.rs.html
index b92d9465..7e156b42 100644
--- a/src/echonet/transport/observer.rs.html
+++ b/src/echonet/transport/observer.rs.html
@@ -1,4 +1,6 @@
-observer.rs - source
1
+observer.rs - source
+    
1
 2
 3
 4
@@ -25,14 +27,14 @@
 25
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/transport/result.rs.html b/src/echonet/transport/result.rs.html
index 81c3e048..0b901a20 100644
--- a/src/echonet/transport/result.rs.html
+++ b/src/echonet/transport/result.rs.html
@@ -1,4 +1,6 @@
-result.rs - source
1
+result.rs - source
+    
1
 2
 3
 4
@@ -15,14 +17,14 @@
 15
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/transport/udp_socket.rs.html b/src/echonet/transport/udp_socket.rs.html
index 36b3485d..f01ca78c 100644
--- a/src/echonet/transport/udp_socket.rs.html
+++ b/src/echonet/transport/udp_socket.rs.html
@@ -1,4 +1,6 @@
-udp_socket.rs - source
1
+udp_socket.rs - source
+    
1
 2
 3
 4
@@ -179,14 +181,14 @@
 179
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
@@ -196,15 +198,15 @@
 use crate::transport::error::{BindError, ScoketError};
 use crate::transport::result::Result;
 use crate::transport::PORT;
-#[cfg(feature = "unix")]
+#[cfg(feature = "unix")]
 use log::warn;
-#[cfg(feature = "unix")]
+#[cfg(feature = "unix")]
 use nix::sys::socket::{shutdown, Shutdown};
-#[cfg(feature = "unix")]
+#[cfg(feature = "unix")]
 use nix::unistd::close;
 use std::io;
 use std::net::{Ipv4Addr, Ipv6Addr, SocketAddr};
-#[cfg(feature = "unix")]
+#[cfg(feature = "unix")]
 use std::os::unix::io::AsRawFd;
 use std::{thread, time};
 
@@ -216,7 +218,7 @@
     ifaddr: Option<SocketAddr>,
 }
 
-#[cfg(feature = "unix")]
+#[cfg(feature = "unix")]
 fn create_socket_v4(ifaddr: SocketAddr) -> io::Result<std::net::UdpSocket> {
     net2::UdpBuilder::new_v4()?
         .reuse_address(true)?
@@ -224,13 +226,13 @@
         .bind(ifaddr)
 }
 
-#[cfg(not(feature = "unix"))]
+#[cfg(not(feature = "unix"))]
 fn create_socket_v4(ifaddr: SocketAddr) -> io::Result<std::net::UdpSocket> {
     let sock = std::net::UdpSocket::bind(ifaddr.to_string());
     sock
 }
 
-#[cfg(feature = "unix")]
+#[cfg(feature = "unix")]
 fn create_socket_v6(ifaddr: SocketAddr) -> io::Result<std::net::UdpSocket> {
     net2::UdpBuilder::new_v6()?
         .reuse_address(true)?
@@ -238,7 +240,7 @@
         .bind(ifaddr)
 }
 
-#[cfg(not(feature = "unix"))]
+#[cfg(not(feature = "unix"))]
 fn create_socket_v6(ifaddr: SocketAddr) -> io::Result<std::net::UdpSocket> {
     let sock = std::net::UdpSocket::bind(ifaddr.to_string());
     sock
@@ -258,7 +260,7 @@
         }
         Err(std::io::Error::new(
             std::io::ErrorKind::Other,
-            "socket is not bound",
+            "socket is not bound",
         ))
     }
     pub fn bind(&mut self, ifaddr: SocketAddr) -> Result<()> {
@@ -286,7 +288,7 @@
         }
 
         if sock.is_none() {
-            return Err(ScoketError::new(&format!("could not bind to {}", ifaddr)));
+            return Err(ScoketError::new(&format!("could not bind to {}", ifaddr)));
         }
 
         self.sock = sock;
@@ -298,16 +300,16 @@
         if self.sock.is_none() {
             return;
         }
-        #[cfg(feature = "unix")]
+        #[cfg(feature = "unix")]
         {
             let fd = self.sock.as_ref().unwrap().as_raw_fd();
             let res = shutdown(fd, Shutdown::Both);
             if res.is_err() {
-                warn!("shutdown ({})", res.err().unwrap().desc());
+                warn!("shutdown ({})", res.err().unwrap().desc());
             }
             let res = close(fd);
             if res.is_err() {
-                warn!("close {:?}", res.err());
+                warn!("close {:?}", res.err());
             }
         }
         thread::sleep(time::Duration::from_millis(UDP_SOCKET_BIND_SLEEP_MSEC));
@@ -319,7 +321,7 @@
         }
         let res = self.sock.as_ref().unwrap().send_to(buf, to_addr);
         if res.is_err() {
-            return Err(ScoketError::new(&format!("{:?}", res.err())));
+            return Err(ScoketError::new(&format!("{:?}", res.err())));
         }
         Ok(res.unwrap())
     }
@@ -335,7 +337,7 @@
         if self.sock.is_none() {
             return Err(BindError::new());
         }
-        self.ifaddr = Some(format!("{}:{}", ifaddr, PORT).parse().unwrap());
+        self.ifaddr = Some(format!("{}:{}", ifaddr, PORT).parse().unwrap());
         self.sock
             .as_ref()
             .unwrap()
@@ -346,7 +348,7 @@
         if self.sock.is_none() {
             return Err(BindError::new());
         }
-        self.ifaddr = Some(format!("{}:{}", ifaddr, PORT).parse().unwrap());
+        self.ifaddr = Some(format!("{}:{}", ifaddr, PORT).parse().unwrap());
         self.sock.as_ref().unwrap().join_multicast_v6(multiaddr, 0)
     }
 }
diff --git a/src/echonet/transport/unicast_manager.rs.html b/src/echonet/transport/unicast_manager.rs.html
index c7445017..46b0d86d 100644
--- a/src/echonet/transport/unicast_manager.rs.html
+++ b/src/echonet/transport/unicast_manager.rs.html
@@ -1,4 +1,6 @@
-unicast_manager.rs - source
1
+unicast_manager.rs - source
+    
1
 2
 3
 4
@@ -113,14 +115,14 @@
 113
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
@@ -129,10 +131,10 @@
 
 use std::net::{IpAddr, SocketAddr};
 
-#[cfg(feature = "unix")]
+#[cfg(feature = "unix")]
 use crate::transport::interface_unix::*;
 
-#[cfg(not(feature = "unix"))]
+#[cfg(not(feature = "unix"))]
 use crate::transport::interface::*;
 
 use crate::protocol::Message;
diff --git a/src/echonet/transport/unicast_manager_test.rs.html b/src/echonet/transport/unicast_manager_test.rs.html
index d0267f32..811a68e4 100644
--- a/src/echonet/transport/unicast_manager_test.rs.html
+++ b/src/echonet/transport/unicast_manager_test.rs.html
@@ -1,4 +1,6 @@
-unicast_manager_test.rs - source
1
+unicast_manager_test.rs - source
+    
1
 2
 3
 4
@@ -26,14 +28,14 @@
 26
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/transport/unicast_server.rs.html b/src/echonet/transport/unicast_server.rs.html
index fc85c45d..3ff6ab6e 100644
--- a/src/echonet/transport/unicast_server.rs.html
+++ b/src/echonet/transport/unicast_server.rs.html
@@ -1,4 +1,6 @@
-unicast_server.rs - source
1
+unicast_server.rs - source
+    
1
 2
 3
 4
@@ -148,14 +150,14 @@
 148
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
@@ -196,7 +198,7 @@
         let addr = to_addr.ip();
         let port = to_addr.port();
         info!(
-            "SEND {} -> {}:{} ({})",
+            "SEND {} -> {}:{} ({})",
             self.socket.read().unwrap().local_addr().unwrap(),
             addr,
             port,
@@ -209,7 +211,7 @@
             .send_to(&msg_bytes, to_addr)
             .is_err()
         {
-            warn!("Couldn't send message to {} {}", addr, port);
+            warn!("Couldn't send message to {} {}", addr, port);
             return false;
         }
         true
@@ -220,13 +222,13 @@
     }
 
     pub fn bind(&mut self, ifaddr: IpAddr) -> bool {
-        let addr = format!("{}:{}", ifaddr, PORT).parse();
+        let addr = format!("{}:{}", ifaddr, PORT).parse();
         if addr.is_err() {
-            error!("bind {} {}", ifaddr, PORT);
+            error!("bind {} {}", ifaddr, PORT);
             return false;
         }
         let addr: SocketAddr = addr.unwrap();
-        debug!("BIND UDP {}", addr);
+        debug!("BIND UDP {}", addr);
         if self.socket.write().unwrap().bind(addr).is_err() {
             return false;
         }
@@ -251,7 +253,7 @@
                         let mut msg = Message::new();
                         if !msg.parse(recv_msg) {
                             warn!(
-                                "Couldn't parse message {} [{}] {}",
+                                "Couldn't parse message {} [{}] {}",
                                 remote_addr.ip(),
                                 n_bytes,
                                 hex::encode_upper(recv_msg)
@@ -259,7 +261,7 @@
                             continue;
                         }
                         info!(
-                            "RECV {} -> {} ({})",
+                            "RECV {} -> {} ({})",
                             remote_addr.ip(),
                             socket.read().unwrap().local_addr().ok().unwrap(),
                             msg
@@ -269,7 +271,7 @@
                     }
                     Err(e) => {
                         warn!(
-                            "RECV {} ({})",
+                            "RECV {} ({})",
                             socket.read().unwrap().local_addr().ok().unwrap(),
                             e
                         );
diff --git a/src/echonet/transport/unicast_server_test.rs.html b/src/echonet/transport/unicast_server_test.rs.html
index 5a3b8d34..a8f45897 100644
--- a/src/echonet/transport/unicast_server_test.rs.html
+++ b/src/echonet/transport/unicast_server_test.rs.html
@@ -1,4 +1,6 @@
-unicast_server_test.rs - source
1
+unicast_server_test.rs - source
+    
1
 2
 3
 4
@@ -76,14 +78,14 @@
 76
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
@@ -96,10 +98,10 @@
     use std::thread;
     use std::time;
 
-    #[cfg(feature = "unix")]
+    #[cfg(feature = "unix")]
     use crate::transport::interface_unix::*;
 
-    #[cfg(not(feature = "unix"))]
+    #[cfg(not(feature = "unix"))]
     use crate::transport::interface::*;
 
     use crate::protocol::Message;
diff --git a/src/echonet/util/bytes.rs.html b/src/echonet/util/bytes.rs.html
index abd511ba..cef7edce 100644
--- a/src/echonet/util/bytes.rs.html
+++ b/src/echonet/util/bytes.rs.html
@@ -1,4 +1,6 @@
-bytes.rs - source
1
+bytes.rs - source
+    
1
 2
 3
 4
@@ -35,14 +37,14 @@
 35
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/util/bytes_test.rs.html b/src/echonet/util/bytes_test.rs.html
index 95092f28..2c772676 100644
--- a/src/echonet/util/bytes_test.rs.html
+++ b/src/echonet/util/bytes_test.rs.html
@@ -1,4 +1,6 @@
-bytes_test.rs - source
1
+bytes_test.rs - source
+    
1
 2
 3
 4
@@ -46,14 +48,14 @@
 46
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/util/mod.rs.html b/src/echonet/util/mod.rs.html
index accd712f..e7bee491 100644
--- a/src/echonet/util/mod.rs.html
+++ b/src/echonet/util/mod.rs.html
@@ -1,4 +1,6 @@
-mod.rs - source
1
+mod.rs - source
+    
1
 2
 3
 4
@@ -22,14 +24,14 @@
 22
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/util/oid.rs.html b/src/echonet/util/oid.rs.html
index 59b0d787..1dd91eb2 100644
--- a/src/echonet/util/oid.rs.html
+++ b/src/echonet/util/oid.rs.html
@@ -1,4 +1,6 @@
-oid.rs - source
1
+oid.rs - source
+    
1
 2
 3
 4
@@ -52,21 +54,21 @@
 52
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
 use crate::object::ObjectCode;
 use crate::util::Bytes;
-#[cfg(feature = "std")]
+#[cfg(feature = "std")]
 use uuid::Uuid;
 
 /// OID generates a unique identification number wit the specified manufacture code.
@@ -84,11 +86,11 @@
         oid[1] = man[0];
         oid[2] = man[1];
         oid[3] = man[2];
-        #[cfg(not(feature = "std"))]
+        #[cfg(not(feature = "std"))]
         {
             oid[16] = 0x01;
         }
-        #[cfg(feature = "std")]
+        #[cfg(feature = "std")]
         {
             let v4_bytes = Uuid::new_v4().into_bytes();
             for n in 0..=12 {
diff --git a/src/echonet/util/oid_test.rs.html b/src/echonet/util/oid_test.rs.html
index 9f3d54ee..11e79891 100644
--- a/src/echonet/util/oid_test.rs.html
+++ b/src/echonet/util/oid_test.rs.html
@@ -1,4 +1,6 @@
-oid_test.rs - source
1
+oid_test.rs - source
+    
1
 2
 3
 4
@@ -26,14 +28,14 @@
 26
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/echonet/version.rs.html b/src/echonet/version.rs.html
index d65b84b4..998004d4 100644
--- a/src/echonet/version.rs.html
+++ b/src/echonet/version.rs.html
@@ -1,4 +1,6 @@
-version.rs - source
1
+version.rs - source
+    
1
 2
 3
 4
@@ -19,14 +21,14 @@
 19
 
// Copyright (C) 2022 Satoshi Konno All rights reserved.
 //
-// Licensed under the Apache License, Version 2.0 (the "License");
+// Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
 // You may obtain a copy of the License at
 //
 //    http://www.apache.org/licenses/LICENSE-2.0
 //
 // Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
+// distributed under the License is distributed on an "AS IS" BASIS,
 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 // See the License for the specific language governing permissions and
 // limitations under the License.
diff --git a/src/uechobench/uechobench.rs.html b/src/uechobench/uechobench.rs.html
new file mode 100644
index 00000000..8136beeb
--- /dev/null
+++ b/src/uechobench/uechobench.rs.html
@@ -0,0 +1,231 @@
+uechobench.rs - source
+    
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+
// Copyright (C) 2022 Satoshi Konno All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+use std::env;
+use std::io::Error;
+use std::string::String;
+use std::time::Duration;
+use std::{thread, time};
+
+use echonet::log::Logger;
+use echonet::protocol::{Message, Property, ESV};
+use echonet::Controller;
+
+fn usages() {
+    println!("Usage: uechobench");
+    println!(" -h : Print this message");
+    println!(" -a : Request all properties");
+    println!(" -v : Enable debug output");
+    println!(" -n : Count of Repeat");
+}
+
+fn main() -> Result<(), Error> {
+    let mut only_mandatory_properties = true;
+    let args: Vec<String> = env::args().collect();
+    let mut n = 0;
+    let mut repeat_cnt = 1;
+    while n < args.len() {
+        let arg = args[n].clone();
+        match arg.as_str() {
+            "-v" => {
+                Logger::init();
+            }
+            "-n" => {
+                n = n + 1;
+                let arg = args[n].clone();
+                repeat_cnt = arg.parse().unwrap();
+            }
+            "-a" => {
+                only_mandatory_properties = false;
+            }
+            "-h" => {
+                usages();
+                return Ok(());
+            }
+            &_ => {}
+        }
+        n = n + 1;
+    }
+
+    let mut ctrl = Controller::new();
+    ctrl.start();
+    ctrl.search();
+
+    thread::sleep(time::Duration::from_secs(2));
+
+    for _ in 0..repeat_cnt {
+        for (i, node) in ctrl.nodes().iter().enumerate() {
+            println!("[{}] {})", i, node.addr());
+
+            // Prints all mandatory properties in the object.
+
+            for (j, obj) in node.objects().iter().enumerate() {
+                println!("    [{}] {:06X} ({})", j, obj.code(), obj.class_name());
+                for obj_prop in obj.properties() {
+                    if only_mandatory_properties && !obj_prop.is_read_required() {
+                        continue;
+                    }
+
+                    // Makes a property value read (ESV::ReadRequest) message.
+                    let mut msg = Message::new();
+                    msg.set_esv(ESV::ReadRequest);
+                    msg.set_deoj(obj.code());
+                    let mut prop = Property::new();
+                    prop.set_code(obj_prop.code());
+                    msg.add_property(prop);
+
+                    let mut prop_data = String::from("");
+                    let rx = ctrl.post_message(&node, &mut msg);
+                    match rx.recv_timeout(Duration::from_secs(1)) {
+                        Ok(msg) => {
+                            if 0 < msg.opc() {
+                                prop_data = hex::encode(msg.property(0).data());
+                            }
+                        }
+                        Err(e) => {
+                            prop_data = format!("{}", e);
+                        }
+                    };
+                    println!(
+                        "        [{:02X}] {}: {}",
+                        obj_prop.code(),
+                        obj_prop.name(),
+                        prop_data
+                    );
+                }
+            }
+        }
+    }
+
+    ctrl.stop();
+
+    Ok(())
+}
+
\ No newline at end of file diff --git a/src/uechopost/uechopost.rs.html b/src/uechopost/uechopost.rs.html new file mode 100644 index 00000000..f98949cd --- /dev/null +++ b/src/uechopost/uechopost.rs.html @@ -0,0 +1,409 @@ +uechopost.rs - source +
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+
// Copyright (C) 2022 Satoshi Konno All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+use std::env;
+use std::net::IpAddr;
+use std::net::Ipv4Addr;
+use std::time::Duration;
+use std::{thread, time};
+
+use echonet::log::Logger;
+use echonet::protocol::{Message, Property, ESV};
+use echonet::util::Bytes;
+use echonet::Controller;
+use hex;
+
+fn usages() {
+    println!(
+        "Usage: uechopost <IP address> <Object code (hex)> <ESV (hex)> (<EPC (hex)> (<EDT (hex)>)*)?"
+    );
+    println!(" -h : Print this message");
+    println!(" -v : Enable debug output");
+}
+
+fn main() {
+    let mut program_name = String::new();
+    let ipaddr_none = IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0));
+    let mut node_addr = ipaddr_none.clone();
+    let mut esv = ESV::Unknown;
+    let mut obj_code = 0;
+    let mut epcs = Vec::new();
+    let mut edts = Vec::new();
+
+    // Parses specified command line arguments.
+
+    for arg in env::args() {
+        match arg.as_str() {
+            "-v" => {
+                Logger::init();
+            }
+            "-h" => {
+                usages();
+                return;
+            }
+            &_ => {
+                if program_name.len() == 0 {
+                    program_name = arg.clone();
+                    continue;
+                }
+                if node_addr == ipaddr_none {
+                    let arg_addr = arg.parse();
+                    if arg_addr.is_err() {
+                        usages();
+                        eprintln!("IP address error: {}", arg);
+                        return;
+                    }
+                    node_addr = arg_addr.unwrap();
+                    continue;
+                }
+                if obj_code == 0 {
+                    let arg_obj = hex::decode(arg.clone());
+                    if arg_obj.is_err() {
+                        usages();
+                        eprintln!("Object code error: {}", arg);
+                        return;
+                    }
+                    obj_code = Bytes::to_u32(&arg_obj.unwrap());
+                    continue;
+                }
+                if esv == ESV::Unknown {
+                    let arg_esv = hex::decode(arg.clone());
+                    if arg_esv.is_err() {
+                        usages();
+                        eprintln!("ESV error: {}", arg);
+                        return;
+                    }
+                    let arg_esv = arg_esv.unwrap();
+                    esv = ESV::from_u8(arg_esv[0]);
+                    if esv == ESV::Unknown {
+                        usages();
+                        eprintln!("ESV error: {}", arg);
+                        return;
+                    }
+                    continue;
+                }
+                if epcs.len() == edts.len() {
+                    let arg_epc = hex::decode(arg.clone());
+                    if arg_epc.is_err() {
+                        usages();
+                        eprintln!("EPC error: {}", arg);
+                        return;
+                    }
+                    let arg_epc = arg_epc.unwrap();
+                    epcs.push(arg_epc[0] as u8);
+                    continue;
+                }
+                if edts.len() < epcs.len() {
+                    let arg_edt = hex::decode(arg.clone());
+                    if arg_edt.is_err() {
+                        usages();
+                        eprintln!("EDT error: {}", arg);
+                        return;
+                    }
+                    let arg_edt = arg_edt.unwrap();
+                    edts.push(arg_edt);
+                }
+            }
+        }
+    }
+
+    // Checks specified command line rguments.
+
+    if node_addr == ipaddr_none {
+        usages();
+        eprintln!("IP address is missing");
+        return;
+    }
+
+    if esv == ESV::Unknown {
+        usages();
+        eprintln!("ESV is missing");
+        return;
+    }
+
+    if obj_code == 0 {
+        usages();
+        eprintln!("Object code is missing");
+        return;
+    }
+
+    if epcs.len() == 0 {
+        usages();
+        eprintln!("EPC is missing");
+        return;
+    }
+
+    // Starts a new controller.
+
+    let mut ctrl = Controller::new();
+    ctrl.start();
+    ctrl.search();
+
+    thread::sleep(time::Duration::from_secs(2));
+
+    // Genarates the specified message.
+
+    let mut req_msg = Message::new();
+    req_msg.set_esv(esv);
+    req_msg.set_deoj(obj_code);
+    for (n, epc) in epcs.iter().enumerate() {
+        let mut prop = Property::new();
+        prop.set_code(*epc);
+        if n < edts.len() {
+            prop.set_data(edts[n].clone());
+        }
+        req_msg.add_property(prop);
+    }
+
+    // Posts the specified message to the specified controller.
+
+    for node in ctrl.nodes().iter() {
+        if node.addr().ip() != node_addr {
+            continue;
+        }
+
+        match req_msg.esv() {
+            ESV::WriteRequest | ESV::NotificationRequest => {
+                ctrl.send_message(&node, &mut req_msg);
+            }
+            ESV::WriteRequestResponseRequired | ESV::ReadRequest | ESV::WriteReadRequest => {
+                let rx = ctrl.post_message(&node, &mut req_msg);
+                match rx.recv_timeout(Duration::from_secs(1)) {
+                    Ok(res_msg) => {
+                        println!("{}", res_msg);
+                    }
+                    Err(e) => {
+                        eprintln!("{}", e);
+                    }
+                };
+            }
+            _ => {
+                eprintln!("ESV ({:X}) is not request", req_msg.esv() as u8);
+            }
+        }
+
+        ctrl.stop();
+        return;
+    }
+
+    eprintln!("Remote node ({}) is not found", node_addr);
+
+    ctrl.stop();
+}
+
\ No newline at end of file diff --git a/src/uechosearch/uechosearch.rs.html b/src/uechosearch/uechosearch.rs.html new file mode 100644 index 00000000..ce180223 --- /dev/null +++ b/src/uechosearch/uechosearch.rs.html @@ -0,0 +1,257 @@ +uechosearch.rs - source +
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+
// Copyright (C) 2022 Satoshi Konno All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+use std::env;
+use std::io::Error;
+use std::string::String;
+use std::time::Duration;
+use std::{thread, time};
+
+use echonet::log::Logger;
+use echonet::protocol::{Message, Property, ESV};
+use echonet::util::Bytes;
+use echonet::{Controller, ManufactureCode, StandardDatabase};
+
+fn usages() {
+    println!("Usage: uechosearch");
+    println!(" -h : Print this message");
+    println!(" -a : Request all properties");
+    println!(" -v : Enable debug output");
+}
+
+fn main() -> Result<(), Error> {
+    let mut only_mandatory_properties = true;
+    for arg in env::args() {
+        match arg.as_str() {
+            "-v" => {
+                Logger::init();
+            }
+            "-a" => {
+                only_mandatory_properties = false;
+            }
+            "-h" => {
+                usages();
+                return Ok(());
+            }
+            &_ => {}
+        }
+    }
+
+    let mut ctrl = Controller::new();
+    ctrl.start();
+    ctrl.search();
+
+    thread::sleep(time::Duration::from_secs(2));
+
+    for (i, node) in ctrl.nodes().iter().enumerate() {
+        // Makes a manufacture code read (ESV::ReadRequest) message.
+        let mut msg = Message::new();
+        msg.set_esv(ESV::ReadRequest);
+        msg.set_deoj(0x0EF001);
+        let mut prop = Property::new();
+        prop.set_code(0x8A);
+        msg.add_property(prop);
+
+        let mut manufacture_name = String::from("");
+        let rx = ctrl.post_message(&node, &mut msg);
+        match rx.recv_timeout(Duration::from_secs(1)) {
+            Ok(msg) => {
+                let props = msg.properties();
+                if 0 < props.len() {
+                    let manufacture_code = Bytes::to_u32(props[0].data()) as ManufactureCode;
+                    let std_db = StandardDatabase::shared();
+                    let found_manufacture = std_db.find_manufacture(manufacture_code);
+                    if found_manufacture.is_some() {
+                        manufacture_name = found_manufacture.unwrap().name().to_string();
+                    }
+                }
+            }
+            Err(_e) => {}
+        };
+
+        println!("[{}] {} ({})", i, node.addr(), manufacture_name);
+
+        // Prints all mandatory properties in the object.
+
+        for (j, obj) in node.objects().iter().enumerate() {
+            println!("    [{}] {:06X} ({})", j, obj.code(), obj.class_name());
+            for obj_prop in obj.properties() {
+                if only_mandatory_properties && !obj_prop.is_read_required() {
+                    continue;
+                }
+
+                // Makes a property value read (ESV::ReadRequest) message.
+                let mut msg = Message::new();
+                msg.set_esv(ESV::ReadRequest);
+                msg.set_deoj(obj.code());
+                let mut prop = Property::new();
+                prop.set_code(obj_prop.code());
+                msg.add_property(prop);
+
+                let mut prop_data = String::from("");
+                let rx = ctrl.post_message(&node, &mut msg);
+                match rx.recv_timeout(Duration::from_secs(1)) {
+                    Ok(msg) => {
+                        if 0 < msg.opc() {
+                            prop_data = hex::encode(msg.property(0).data());
+                        }
+                    }
+                    Err(e) => {
+                        prop_data = format!("{}", e);
+                    }
+                };
+                println!(
+                    "        [{:02X}] {}: {}",
+                    obj_prop.code(),
+                    obj_prop.name(),
+                    prop_data
+                );
+            }
+        }
+    }
+
+    ctrl.stop();
+
+    Ok(())
+}
+
\ No newline at end of file diff --git a/static.files/ayu-614652228113ac93.css b/static.files/ayu-614652228113ac93.css deleted file mode 100644 index 8fd09c9e..00000000 --- a/static.files/ayu-614652228113ac93.css +++ /dev/null @@ -1 +0,0 @@ - :root{--main-background-color:#0f1419;--main-color:#c5c5c5;--settings-input-color:#ffb454;--settings-input-border-color:#999;--settings-button-color:#fff;--settings-button-border-focus:#e0e0e0;--sidebar-background-color:#14191f;--sidebar-background-color-hover:rgba(70,70,70,0.33);--code-block-background-color:#191f26;--scrollbar-track-background-color:transparent;--scrollbar-thumb-background-color:#5c6773;--scrollbar-color:#5c6773 #24292f;--headings-border-bottom-color:#5c6773;--border-color:#5c6773;--button-background-color:#141920;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--search-input-focused-border-color:#5c6773;--copy-path-button-color:#fff;--copy-path-img-filter:invert(70%);--copy-path-img-hover-filter:invert(100%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--type-link-color:#ffa0a5;--trait-link-color:#39afd7;--assoc-item-link-color:#39afd7;--function-link-color:#fdd687;--macro-link-color:#a37acc;--keyword-link-color:#39afd7;--mod-link-color:#39afd7;--link-color:#39afd7;--sidebar-link-color:#53b1db;--sidebar-current-link-background-color:transparent;--search-result-link-focus-background-color:#3c3c3c;--search-result-border-color:#aaa3;--search-color:#fff;--search-error-code-background-color:#4f4c4c;--search-results-alias-color:#c5c5c5;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:none;--search-tab-button-not-selected-background:transparent !important;--search-tab-button-selected-border-top-color:none;--search-tab-button-selected-background:#141920 !important;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ff7733;--code-highlight-kw-2-color:#ff7733;--code-highlight-lifetime-color:#ff7733;--code-highlight-prelude-color:#69f2df;--code-highlight-prelude-val-color:#ff7733;--code-highlight-number-color:#b8cc52;--code-highlight-string-color:#b8cc52;--code-highlight-literal-color:#ff7733;--code-highlight-attribute-color:#e6e1cf;--code-highlight-self-color:#36a3d9;--code-highlight-macro-color:#a37acc;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#788797;--code-highlight-doc-comment-color:#a1ac88;--src-line-numbers-span-color:#5c6773;--src-line-number-highlighted-background-color:rgba(255,236,164,0.06);--test-arrow-color:#788797;--test-arrow-background-color:rgba(57,175,215,0.09);--test-arrow-hover-color:#c5c5c5;--test-arrow-hover-background-color:rgba(57,175,215,0.368);--target-background-color:rgba(255,236,164,0.06);--target-border-color:rgba(255,180,76,0.85);--kbd-color:#c5c5c5;--kbd-background:#314559;--kbd-box-shadow-color:#5c6773;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(41%) sepia(12%) saturate(487%) hue-rotate(171deg) brightness(94%) contrast(94%);--crate-search-div-hover-filter:invert(98%) sepia(12%) saturate(81%) hue-rotate(343deg) brightness(113%) contrast(76%);--crate-search-hover-border:#e0e0e0;--source-sidebar-background-selected:#14191f;--source-sidebar-background-hover:#14191f;--table-alt-row-background-color:#191f26;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:rgb(91,59,1);--scrape-example-code-line-highlight-focus:rgb(124,75,15);--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(15,20,25,1);--scrape-example-code-wrapper-background-end:rgba(15,20,25,0);}h1,h2,h3,h4,h1 a,.sidebar h2 a,.sidebar h3 a,#source-sidebar>.title{color:#fff;}h4{border:none;}.docblock code{color:#ffb454;}.docblock a>code{color:#39AFD7 !important;}.code-header,.docblock pre>code,pre,pre>code,.item-info code,.rustdoc.source .example-wrap{color:#e6e1cf;}.sidebar .current,.sidebar a:hover,#source-sidebar div.files>a:hover,details.dir-entry summary:hover,#source-sidebar div.files>a:focus,details.dir-entry summary:focus,#source-sidebar div.files>a.selected{color:#ffb44c;}.sidebar-elems .location{color:#ff7733;}.src-line-numbers .line-highlighted{color:#708090;padding-right:7px;border-right:1px solid #ffb44c;}.search-results a:hover,.search-results a:focus{color:#fff !important;background-color:#3c3c3c;}.search-results a{color:#0096cf;}.search-results a div.desc{color:#c5c5c5;}.result-name .primitive>i,.result-name .keyword>i{color:#788797;}#search-tabs>button.selected{border-bottom:1px solid #ffb44c !important;border-top:none;}#search-tabs>button:not(.selected){border:none;background-color:transparent !important;}#search-tabs>button:hover{border-bottom:1px solid rgba(242,151,24,0.3);}#settings-menu>a img{filter:invert(100);} \ No newline at end of file diff --git a/static.files/dark-1097f8e92a01e3cf.css b/static.files/dark-1097f8e92a01e3cf.css deleted file mode 100644 index 1e5e7d19..00000000 --- a/static.files/dark-1097f8e92a01e3cf.css +++ /dev/null @@ -1 +0,0 @@ -:root{--main-background-color:#353535;--main-color:#ddd;--settings-input-color:#2196f3;--settings-input-border-color:#999;--settings-button-color:#000;--settings-button-border-focus:#ffb900;--sidebar-background-color:#505050;--sidebar-background-color-hover:#676767;--code-block-background-color:#2A2A2A;--scrollbar-track-background-color:#717171;--scrollbar-thumb-background-color:rgba(32,34,37,.6);--scrollbar-color:rgba(32,34,37,.6) #5a5a5a;--headings-border-bottom-color:#d2d2d2;--border-color:#e0e0e0;--button-background-color:#f0f0f0;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--search-input-focused-border-color:#008dfd;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(65%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--type-link-color:#2dbfb8;--trait-link-color:#b78cf2;--assoc-item-link-color:#d2991d;--function-link-color:#2bab63;--macro-link-color:#09bd00;--keyword-link-color:#d2991d;--mod-link-color:#d2991d;--link-color:#d2991d;--sidebar-link-color:#fdbf35;--sidebar-current-link-background-color:#444;--search-result-link-focus-background-color:#616161;--search-result-border-color:#aaa3;--search-color:#111;--search-error-code-background-color:#484848;--search-results-alias-color:#fff;--search-results-grey-color:#ccc;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#252525;--search-tab-button-not-selected-background:#252525;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#353535;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ab8ac1;--code-highlight-kw-2-color:#769acb;--code-highlight-lifetime-color:#d97f26;--code-highlight-prelude-color:#769acb;--code-highlight-prelude-val-color:#ee6868;--code-highlight-number-color:#83a300;--code-highlight-string-color:#83a300;--code-highlight-literal-color:#ee6868;--code-highlight-attribute-color:#ee6868;--code-highlight-self-color:#ee6868;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8d8d8b;--code-highlight-doc-comment-color:#8ca375;--src-line-numbers-span-color:#3b91e2;--src-line-number-highlighted-background-color:#0a042f;--test-arrow-color:#dedede;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#dedede;--test-arrow-hover-background-color:#4e8bca;--target-background-color:#494a3d;--target-border-color:#bb7410;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(94%) sepia(0%) saturate(721%) hue-rotate(255deg) brightness(90%) contrast(90%);--crate-search-div-hover-filter:invert(69%) sepia(60%) saturate(6613%) hue-rotate(184deg) brightness(100%) contrast(91%);--crate-search-hover-border:#2196f3;--source-sidebar-background-selected:#333;--source-sidebar-background-hover:#444;--table-alt-row-background-color:#2A2A2A;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:rgb(91,59,1);--scrape-example-code-line-highlight-focus:rgb(124,75,15);--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(53,53,53,1);--scrape-example-code-wrapper-background-end:rgba(53,53,53,0);} \ No newline at end of file diff --git a/static.files/light-0f8c037637f9eb3e.css b/static.files/light-0f8c037637f9eb3e.css deleted file mode 100644 index 21c3a859..00000000 --- a/static.files/light-0f8c037637f9eb3e.css +++ /dev/null @@ -1 +0,0 @@ -:root{--main-background-color:white;--main-color:black;--settings-input-color:#2196f3;--settings-input-border-color:#717171;--settings-button-color:#000;--settings-button-border-focus:#717171;--sidebar-background-color:#F5F5F5;--sidebar-background-color-hover:#E0E0E0;--code-block-background-color:#F5F5F5;--scrollbar-track-background-color:#dcdcdc;--scrollbar-thumb-background-color:rgba(36,37,39,0.6);--scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;--headings-border-bottom-color:#ddd;--border-color:#e0e0e0;--button-background-color:#fff;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:none;--search-input-focused-border-color:#66afe9;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(35%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--type-link-color:#ad378a;--trait-link-color:#6e4fc9;--assoc-item-link-color:#3873ad;--function-link-color:#ad7c37;--macro-link-color:#068000;--keyword-link-color:#3873ad;--mod-link-color:#3873ad;--link-color:#3873ad;--sidebar-link-color:#356da4;--sidebar-current-link-background-color:#fff;--search-result-link-focus-background-color:#ccc;--search-result-border-color:#aaa3;--search-color:#000;--search-error-code-background-color:#d0cccc;--search-results-alias-color:#000;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#e6e6e6;--search-tab-button-not-selected-background:#e6e6e6;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#ffffff;--stab-background-color:#fff5d6;--stab-code-color:#000;--code-highlight-kw-color:#8959a8;--code-highlight-kw-2-color:#4271ae;--code-highlight-lifetime-color:#b76514;--code-highlight-prelude-color:#4271ae;--code-highlight-prelude-val-color:#c82829;--code-highlight-number-color:#718c00;--code-highlight-string-color:#718c00;--code-highlight-literal-color:#c82829;--code-highlight-attribute-color:#c82829;--code-highlight-self-color:#c82829;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8e908c;--code-highlight-doc-comment-color:#4d4d4c;--src-line-numbers-span-color:#c67e2d;--src-line-number-highlighted-background-color:#fdffd3;--test-arrow-color:#f5f5f5;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#f5f5f5;--test-arrow-hover-background-color:#4e8bca;--target-background-color:#fdffd3;--target-border-color:#ad7c37;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:initial;--crate-search-div-filter:invert(100%) sepia(0%) saturate(4223%) hue-rotate(289deg) brightness(114%) contrast(76%);--crate-search-div-hover-filter:invert(44%) sepia(18%) saturate(23%) hue-rotate(317deg) brightness(96%) contrast(93%);--crate-search-hover-border:#717171;--source-sidebar-background-selected:#fff;--source-sidebar-background-hover:#e0e0e0;--table-alt-row-background-color:#F5F5F5;--codeblock-link-background:#eee;--scrape-example-toggle-line-background:#ccc;--scrape-example-toggle-line-hover-background:#999;--scrape-example-code-line-highlight:#fcffd6;--scrape-example-code-line-highlight-focus:#f6fdb0;--scrape-example-help-border-color:#555;--scrape-example-help-color:#333;--scrape-example-help-hover-border-color:#000;--scrape-example-help-hover-color:#000;--scrape-example-code-wrapper-background-start:rgba(255,255,255,1);--scrape-example-code-wrapper-background-end:rgba(255,255,255,0);} \ No newline at end of file diff --git a/static.files/main-0795b7d26be81095.js b/static.files/main-0795b7d26be81095.js deleted file mode 100644 index 87b43389..00000000 --- a/static.files/main-0795b7d26be81095.js +++ /dev/null @@ -1,12 +0,0 @@ -"use strict";window.RUSTDOC_TOOLTIP_HOVER_MS=300;window.RUSTDOC_TOOLTIP_HOVER_EXIT_MS=450;function resourcePath(basename,extension){return getVar("root-path")+basename+getVar("resource-suffix")+extension}function hideMain(){addClass(document.getElementById(MAIN_ID),"hidden")}function showMain(){removeClass(document.getElementById(MAIN_ID),"hidden")}function elemIsInParent(elem,parent){while(elem&&elem!==document.body){if(elem===parent){return true}elem=elem.parentElement}return false}function blurHandler(event,parentElem,hideCallback){if(!elemIsInParent(document.activeElement,parentElem)&&!elemIsInParent(event.relatedTarget,parentElem)){hideCallback()}}window.rootPath=getVar("root-path");window.currentCrate=getVar("current-crate");function setMobileTopbar(){const mobileLocationTitle=document.querySelector(".mobile-topbar h2");const locationTitle=document.querySelector(".sidebar h2.location");if(mobileLocationTitle&&locationTitle){mobileLocationTitle.innerHTML=locationTitle.innerHTML}}function getVirtualKey(ev){if("key"in ev&&typeof ev.key!=="undefined"){return ev.key}const c=ev.charCode||ev.keyCode;if(c===27){return"Escape"}return String.fromCharCode(c)}const MAIN_ID="main-content";const SETTINGS_BUTTON_ID="settings-menu";const ALTERNATIVE_DISPLAY_ID="alternative-display";const NOT_DISPLAYED_ID="not-displayed";const HELP_BUTTON_ID="help-button";function getSettingsButton(){return document.getElementById(SETTINGS_BUTTON_ID)}function getHelpButton(){return document.getElementById(HELP_BUTTON_ID)}function getNakedUrl(){return window.location.href.split("?")[0].split("#")[0]}function insertAfter(newNode,referenceNode){referenceNode.parentNode.insertBefore(newNode,referenceNode.nextSibling)}function getOrCreateSection(id,classes){let el=document.getElementById(id);if(!el){el=document.createElement("section");el.id=id;el.className=classes;insertAfter(el,document.getElementById(MAIN_ID))}return el}function getAlternativeDisplayElem(){return getOrCreateSection(ALTERNATIVE_DISPLAY_ID,"content hidden")}function getNotDisplayedElem(){return getOrCreateSection(NOT_DISPLAYED_ID,"hidden")}function switchDisplayedElement(elemToDisplay){const el=getAlternativeDisplayElem();if(el.children.length>0){getNotDisplayedElem().appendChild(el.firstElementChild)}if(elemToDisplay===null){addClass(el,"hidden");showMain();return}el.appendChild(elemToDisplay);hideMain();removeClass(el,"hidden")}function browserSupportsHistoryApi(){return window.history&&typeof window.history.pushState==="function"}function loadCss(cssUrl){const link=document.createElement("link");link.href=cssUrl;link.rel="stylesheet";document.getElementsByTagName("head")[0].appendChild(link)}function preLoadCss(cssUrl){const link=document.createElement("link");link.href=cssUrl;link.rel="preload";link.as="style";document.getElementsByTagName("head")[0].appendChild(link)}(function(){const isHelpPage=window.location.pathname.endsWith("/help.html");function loadScript(url){const script=document.createElement("script");script.src=url;document.head.append(script)}getSettingsButton().onclick=event=>{if(event.ctrlKey||event.altKey||event.metaKey){return}window.hideAllModals(false);addClass(getSettingsButton(),"rotate");event.preventDefault();loadCss(getVar("static-root-path")+getVar("settings-css"));loadScript(getVar("static-root-path")+getVar("settings-js"));preLoadCss(getVar("static-root-path")+getVar("theme-light-css"));preLoadCss(getVar("static-root-path")+getVar("theme-dark-css"));preLoadCss(getVar("static-root-path")+getVar("theme-ayu-css"));setTimeout(()=>{const themes=getVar("themes").split(",");for(const theme of themes){if(theme!==""){preLoadCss(getVar("root-path")+theme+".css")}}},0)};window.searchState={loadingText:"Loading search results...",input:document.getElementsByClassName("search-input")[0],outputElement:()=>{let el=document.getElementById("search");if(!el){el=document.createElement("section");el.id="search";getNotDisplayedElem().appendChild(el)}return el},title:document.title,titleBeforeSearch:document.title,timeout:null,currentTab:0,focusedByTab:[null,null,null],clearInputTimeout:()=>{if(searchState.timeout!==null){clearTimeout(searchState.timeout);searchState.timeout=null}},isDisplayed:()=>searchState.outputElement().parentElement.id===ALTERNATIVE_DISPLAY_ID,focus:()=>{searchState.input.focus()},defocus:()=>{searchState.input.blur()},showResults:search=>{if(search===null||typeof search==="undefined"){search=searchState.outputElement()}switchDisplayedElement(search);searchState.mouseMovedAfterSearch=false;document.title=searchState.title},removeQueryParameters:()=>{document.title=searchState.titleBeforeSearch;if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.hash)}},hideResults:()=>{switchDisplayedElement(null);searchState.removeQueryParameters()},getQueryStringParams:()=>{const params={};window.location.search.substring(1).split("&").map(s=>{const pair=s.split("=");params[decodeURIComponent(pair[0])]=typeof pair[1]==="undefined"?null:decodeURIComponent(pair[1])});return params},setup:()=>{const search_input=searchState.input;if(!searchState.input){return}let searchLoaded=false;function loadSearch(){if(!searchLoaded){searchLoaded=true;loadScript(getVar("static-root-path")+getVar("search-js"));loadScript(resourcePath("search-index",".js"))}}search_input.addEventListener("focus",()=>{search_input.origPlaceholder=search_input.placeholder;search_input.placeholder="Type your search here.";loadSearch()});if(search_input.value!==""){loadSearch()}const params=searchState.getQueryStringParams();if(params.search!==undefined){searchState.setLoadingSearch();loadSearch()}},setLoadingSearch:()=>{const search=searchState.outputElement();search.innerHTML="

"+searchState.loadingText+"

";searchState.showResults(search)},};const toggleAllDocsId="toggle-all-docs";let savedHash="";function handleHashes(ev){if(ev!==null&&searchState.isDisplayed()&&ev.newURL){switchDisplayedElement(null);const hash=ev.newURL.slice(ev.newURL.indexOf("#")+1);if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.search+"#"+hash)}const elem=document.getElementById(hash);if(elem){elem.scrollIntoView()}}const pageId=window.location.hash.replace(/^#/,"");if(savedHash!==pageId){savedHash=pageId;if(pageId!==""){expandSection(pageId)}}}function onHashChange(ev){hideSidebar();handleHashes(ev)}function openParentDetails(elem){while(elem){if(elem.tagName==="DETAILS"){elem.open=true}elem=elem.parentNode}}function expandSection(id){openParentDetails(document.getElementById(id))}function handleEscape(ev){searchState.clearInputTimeout();searchState.hideResults();ev.preventDefault();searchState.defocus();window.hideAllModals(true)}function handleShortcut(ev){const disableShortcuts=getSettingValue("disable-shortcuts")==="true";if(ev.ctrlKey||ev.altKey||ev.metaKey||disableShortcuts){return}if(document.activeElement.tagName==="INPUT"&&document.activeElement.type!=="checkbox"&&document.activeElement.type!=="radio"){switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break}}else{switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break;case"s":case"S":ev.preventDefault();searchState.focus();break;case"+":ev.preventDefault();expandAllDocs();break;case"-":ev.preventDefault();collapseAllDocs();break;case"?":showHelp();break;default:break}}}document.addEventListener("keypress",handleShortcut);document.addEventListener("keydown",handleShortcut);function addSidebarItems(){if(!window.SIDEBAR_ITEMS){return}const sidebar=document.getElementsByClassName("sidebar-elems")[0];function block(shortty,id,longty){const filtered=window.SIDEBAR_ITEMS[shortty];if(!filtered){return}const h3=document.createElement("h3");h3.innerHTML=`${longty}`;const ul=document.createElement("ul");ul.className="block "+shortty;for(const name of filtered){let path;if(shortty==="mod"){path=name+"/index.html"}else{path=shortty+"."+name+".html"}const current_page=document.location.href.split("/").pop();const link=document.createElement("a");link.href=path;if(path===current_page){link.className="current"}link.textContent=name;const li=document.createElement("li");li.appendChild(link);ul.appendChild(li)}sidebar.appendChild(h3);sidebar.appendChild(ul)}if(sidebar){block("primitive","primitives","Primitive Types");block("mod","modules","Modules");block("macro","macros","Macros");block("struct","structs","Structs");block("enum","enums","Enums");block("union","unions","Unions");block("constant","constants","Constants");block("static","static","Statics");block("trait","traits","Traits");block("fn","functions","Functions");block("type","types","Type Definitions");block("foreigntype","foreign-types","Foreign Types");block("keyword","keywords","Keywords");block("traitalias","trait-aliases","Trait Aliases")}}window.register_implementors=imp=>{const implementors=document.getElementById("implementors-list");const synthetic_implementors=document.getElementById("synthetic-implementors-list");const inlined_types=new Set();const TEXT_IDX=0;const SYNTHETIC_IDX=1;const TYPES_IDX=2;if(synthetic_implementors){onEachLazy(synthetic_implementors.getElementsByClassName("impl"),el=>{const aliases=el.getAttribute("data-aliases");if(!aliases){return}aliases.split(",").forEach(alias=>{inlined_types.add(alias)})})}let currentNbImpls=implementors.getElementsByClassName("impl").length;const traitName=document.querySelector(".main-heading h1 > .trait").textContent;const baseIdName="impl-"+traitName+"-";const libs=Object.getOwnPropertyNames(imp);const script=document.querySelector("script[data-ignore-extern-crates]");const ignoreExternCrates=new Set((script?script.getAttribute("data-ignore-extern-crates"):"").split(","));for(const lib of libs){if(lib===window.currentCrate||ignoreExternCrates.has(lib)){continue}const structs=imp[lib];struct_loop:for(const struct of structs){const list=struct[SYNTHETIC_IDX]?synthetic_implementors:implementors;if(struct[SYNTHETIC_IDX]){for(const struct_type of struct[TYPES_IDX]){if(inlined_types.has(struct_type)){continue struct_loop}inlined_types.add(struct_type)}}const code=document.createElement("h3");code.innerHTML=struct[TEXT_IDX];addClass(code,"code-header");onEachLazy(code.getElementsByTagName("a"),elem=>{const href=elem.getAttribute("href");if(href&&!/^(?:[a-z+]+:)?\/\//.test(href)){elem.setAttribute("href",window.rootPath+href)}});const currentId=baseIdName+currentNbImpls;const anchor=document.createElement("a");anchor.href="#"+currentId;addClass(anchor,"anchor");const display=document.createElement("div");display.id=currentId;addClass(display,"impl");display.appendChild(anchor);display.appendChild(code);list.appendChild(display);currentNbImpls+=1}}};if(window.pending_implementors){window.register_implementors(window.pending_implementors)}function addSidebarCrates(){if(!window.ALL_CRATES){return}const sidebarElems=document.getElementsByClassName("sidebar-elems")[0];if(!sidebarElems){return}const h3=document.createElement("h3");h3.innerHTML="Crates";const ul=document.createElement("ul");ul.className="block crate";for(const crate of window.ALL_CRATES){const link=document.createElement("a");link.href=window.rootPath+crate+"/index.html";if(window.rootPath!=="./"&&crate===window.currentCrate){link.className="current"}link.textContent=crate;const li=document.createElement("li");li.appendChild(link);ul.appendChild(li)}sidebarElems.appendChild(h3);sidebarElems.appendChild(ul)}function expandAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);removeClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hasClass(e,"type-contents-toggle")&&!hasClass(e,"more-examples-toggle")){e.open=true}});innerToggle.title="collapse all docs";innerToggle.children[0].innerText="\u2212"}function collapseAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);addClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(e.parentNode.id!=="implementations-list"||(!hasClass(e,"implementors-toggle")&&!hasClass(e,"type-contents-toggle"))){e.open=false}});innerToggle.title="expand all docs";innerToggle.children[0].innerText="+"}function toggleAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);if(!innerToggle){return}if(hasClass(innerToggle,"will-expand")){expandAllDocs()}else{collapseAllDocs()}}(function(){const toggles=document.getElementById(toggleAllDocsId);if(toggles){toggles.onclick=toggleAllDocs}const hideMethodDocs=getSettingValue("auto-hide-method-docs")==="true";const hideImplementations=getSettingValue("auto-hide-trait-implementations")==="true";const hideLargeItemContents=getSettingValue("auto-hide-large-items")!=="false";function setImplementorsTogglesOpen(id,open){const list=document.getElementById(id);if(list!==null){onEachLazy(list.getElementsByClassName("implementors-toggle"),e=>{e.open=open})}}if(hideImplementations){setImplementorsTogglesOpen("trait-implementations-list",false);setImplementorsTogglesOpen("blanket-implementations-list",false)}onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hideLargeItemContents&&hasClass(e,"type-contents-toggle")){e.open=true}if(hideMethodDocs&&hasClass(e,"method-toggle")){e.open=false}})}());window.rustdoc_add_line_numbers_to_examples=()=>{onEachLazy(document.getElementsByClassName("rust-example-rendered"),x=>{const parent=x.parentNode;const line_numbers=parent.querySelectorAll(".example-line-numbers");if(line_numbers.length>0){return}const count=x.textContent.split("\n").length;const elems=[];for(let i=0;i{onEachLazy(document.getElementsByClassName("rust-example-rendered"),x=>{const parent=x.parentNode;const line_numbers=parent.querySelectorAll(".example-line-numbers");for(const node of line_numbers){parent.removeChild(node)}})};if(getSettingValue("line-numbers")==="true"){window.rustdoc_add_line_numbers_to_examples()}function showSidebar(){window.hideAllModals(false);const sidebar=document.getElementsByClassName("sidebar")[0];addClass(sidebar,"shown")}function hideSidebar(){const sidebar=document.getElementsByClassName("sidebar")[0];removeClass(sidebar,"shown")}window.addEventListener("resize",()=>{if(window.CURRENT_TOOLTIP_ELEMENT){const base=window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE;const force_visible=base.TOOLTIP_FORCE_VISIBLE;hideTooltip(false);if(force_visible){showTooltip(base);base.TOOLTIP_FORCE_VISIBLE=true}}});const mainElem=document.getElementById(MAIN_ID);if(mainElem){mainElem.addEventListener("click",hideSidebar)}onEachLazy(document.querySelectorAll("a[href^='#']"),el=>{el.addEventListener("click",()=>{expandSection(el.hash.slice(1));hideSidebar()})});onEachLazy(document.querySelectorAll(".toggle > summary:not(.hideme)"),el=>{el.addEventListener("click",e=>{if(e.target.tagName!=="SUMMARY"&&e.target.tagName!=="A"){e.preventDefault()}})});function showTooltip(e){const notable_ty=e.getAttribute("data-notable-ty");if(!window.NOTABLE_TRAITS&¬able_ty){const data=document.getElementById("notable-traits-data");if(data){window.NOTABLE_TRAITS=JSON.parse(data.innerText)}else{throw new Error("showTooltip() called with notable without any notable traits!")}}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE===e){clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);return}window.hideAllModals(false);const wrapper=document.createElement("div");if(notable_ty){wrapper.innerHTML="
"+window.NOTABLE_TRAITS[notable_ty]+"
"}else{if(e.getAttribute("title")!==null){e.setAttribute("data-title",e.getAttribute("title"));e.removeAttribute("title")}if(e.getAttribute("data-title")!==null){const titleContent=document.createElement("div");titleContent.className="content";titleContent.appendChild(document.createTextNode(e.getAttribute("data-title")));wrapper.appendChild(titleContent)}}wrapper.className="tooltip popover";const focusCatcher=document.createElement("div");focusCatcher.setAttribute("tabindex","0");focusCatcher.onfocus=hideTooltip;wrapper.appendChild(focusCatcher);const pos=e.getBoundingClientRect();wrapper.style.top=(pos.top+window.scrollY+pos.height)+"px";wrapper.style.left=0;wrapper.style.right="auto";wrapper.style.visibility="hidden";const body=document.getElementsByTagName("body")[0];body.appendChild(wrapper);const wrapperPos=wrapper.getBoundingClientRect();const finalPos=pos.left+window.scrollX-wrapperPos.width+24;if(finalPos>0){wrapper.style.left=finalPos+"px"}else{wrapper.style.setProperty("--popover-arrow-offset",(wrapperPos.right-pos.right+4)+"px")}wrapper.style.visibility="";window.CURRENT_TOOLTIP_ELEMENT=wrapper;window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE=e;clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);wrapper.onpointerenter=function(ev){if(ev.pointerType!=="mouse"){return}clearTooltipHoverTimeout(e)};wrapper.onpointerleave=function(ev){if(ev.pointerType!=="mouse"){return}if(!e.TOOLTIP_FORCE_VISIBLE&&!elemIsInParent(ev.relatedTarget,e)){setTooltipHoverTimeout(e,false);addClass(wrapper,"fade-out")}}}function setTooltipHoverTimeout(element,show){clearTooltipHoverTimeout(element);if(!show&&!window.CURRENT_TOOLTIP_ELEMENT){return}if(show&&window.CURRENT_TOOLTIP_ELEMENT){return}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE!==element){return}element.TOOLTIP_HOVER_TIMEOUT=setTimeout(()=>{if(show){showTooltip(element)}else if(!element.TOOLTIP_FORCE_VISIBLE){hideTooltip(false)}},show?window.RUSTDOC_TOOLTIP_HOVER_MS:window.RUSTDOC_TOOLTIP_HOVER_EXIT_MS)}function clearTooltipHoverTimeout(element){if(element.TOOLTIP_HOVER_TIMEOUT!==undefined){removeClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out");clearTimeout(element.TOOLTIP_HOVER_TIMEOUT);delete element.TOOLTIP_HOVER_TIMEOUT}}function tooltipBlurHandler(event){if(window.CURRENT_TOOLTIP_ELEMENT&&!elemIsInParent(document.activeElement,window.CURRENT_TOOLTIP_ELEMENT)&&!elemIsInParent(event.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT)&&!elemIsInParent(document.activeElement,window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE)&&!elemIsInParent(event.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE)){setTimeout(()=>hideTooltip(false),0)}}function hideTooltip(focus){if(window.CURRENT_TOOLTIP_ELEMENT){if(window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE){if(focus){window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.focus()}window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE=false}const body=document.getElementsByTagName("body")[0];body.removeChild(window.CURRENT_TOOLTIP_ELEMENT);clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);window.CURRENT_TOOLTIP_ELEMENT=null}}onEachLazy(document.getElementsByClassName("tooltip"),e=>{e.onclick=function(){this.TOOLTIP_FORCE_VISIBLE=this.TOOLTIP_FORCE_VISIBLE?false:true;if(window.CURRENT_TOOLTIP_ELEMENT&&!this.TOOLTIP_FORCE_VISIBLE){hideTooltip(true)}else{showTooltip(this);window.CURRENT_TOOLTIP_ELEMENT.setAttribute("tabindex","0");window.CURRENT_TOOLTIP_ELEMENT.focus();window.CURRENT_TOOLTIP_ELEMENT.onblur=tooltipBlurHandler}return false};e.onpointerenter=function(ev){if(ev.pointerType!=="mouse"){return}setTooltipHoverTimeout(this,true)};e.onpointermove=function(ev){if(ev.pointerType!=="mouse"){return}setTooltipHoverTimeout(this,true)};e.onpointerleave=function(ev){if(ev.pointerType!=="mouse"){return}if(!this.TOOLTIP_FORCE_VISIBLE&&!elemIsInParent(ev.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT)){setTooltipHoverTimeout(e,false);addClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out")}}});const sidebar_menu_toggle=document.getElementsByClassName("sidebar-menu-toggle")[0];if(sidebar_menu_toggle){sidebar_menu_toggle.addEventListener("click",()=>{const sidebar=document.getElementsByClassName("sidebar")[0];if(!hasClass(sidebar,"shown")){showSidebar()}else{hideSidebar()}})}function helpBlurHandler(event){blurHandler(event,getHelpButton(),window.hidePopoverMenus)}function buildHelpMenu(){const book_info=document.createElement("span");const channel=getVar("channel");book_info.className="top";book_info.innerHTML=`You can find more information in \ -the rustdoc book.`;const shortcuts=[["?","Show this help dialog"],["S","Focus the search field"],["↑","Move up in search results"],["↓","Move down in search results"],["← / →","Switch result tab (when results focused)"],["⏎","Go to active search result"],["+","Expand all sections"],["-","Collapse all sections"],].map(x=>"
"+x[0].split(" ").map((y,index)=>((index&1)===0?""+y+"":" "+y+" ")).join("")+"
"+x[1]+"
").join("");const div_shortcuts=document.createElement("div");addClass(div_shortcuts,"shortcuts");div_shortcuts.innerHTML="

Keyboard Shortcuts

"+shortcuts+"
";const infos=[`For a full list of all search features, take a look here.`,"Prefix searches with a type followed by a colon (e.g., fn:) to \ - restrict the search to a given item kind.","Accepted kinds are: fn, mod, struct, \ - enum, trait, type, macro, \ - and const.","Search functions by type signature (e.g., vec -> usize or \ - -> vec or String, enum:Cow -> bool)","You can look for items with an exact name by putting double quotes around \ - your request: \"string\"","Look for functions that accept or return \ - slices and \ - arrays by writing \ - square brackets (e.g., -> [u8] or [] -> Option)","Look for items inside another one by searching for a path: vec::Vec",].map(x=>"

"+x+"

").join("");const div_infos=document.createElement("div");addClass(div_infos,"infos");div_infos.innerHTML="

Search Tricks

"+infos;const rustdoc_version=document.createElement("span");rustdoc_version.className="bottom";const rustdoc_version_code=document.createElement("code");rustdoc_version_code.innerText="rustdoc "+getVar("rustdoc-version");rustdoc_version.appendChild(rustdoc_version_code);const container=document.createElement("div");if(!isHelpPage){container.className="popover"}container.id="help";container.style.display="none";const side_by_side=document.createElement("div");side_by_side.className="side-by-side";side_by_side.appendChild(div_shortcuts);side_by_side.appendChild(div_infos);container.appendChild(book_info);container.appendChild(side_by_side);container.appendChild(rustdoc_version);if(isHelpPage){const help_section=document.createElement("section");help_section.appendChild(container);document.getElementById("main-content").appendChild(help_section);container.style.display="block"}else{const help_button=getHelpButton();help_button.appendChild(container);container.onblur=helpBlurHandler;help_button.onblur=helpBlurHandler;help_button.children[0].onblur=helpBlurHandler}return container}window.hideAllModals=function(switchFocus){hideSidebar();window.hidePopoverMenus();hideTooltip(switchFocus)};window.hidePopoverMenus=function(){onEachLazy(document.querySelectorAll(".search-form .popover"),elem=>{elem.style.display="none"})};function getHelpMenu(buildNeeded){let menu=getHelpButton().querySelector(".popover");if(!menu&&buildNeeded){menu=buildHelpMenu()}return menu}function showHelp(){getHelpButton().querySelector("a").focus();const menu=getHelpMenu(true);if(menu.style.display==="none"){window.hideAllModals();menu.style.display=""}}if(isHelpPage){showHelp();document.querySelector(`#${HELP_BUTTON_ID} > a`).addEventListener("click",event=>{const target=event.target;if(target.tagName!=="A"||target.parentElement.id!==HELP_BUTTON_ID||event.ctrlKey||event.altKey||event.metaKey){return}event.preventDefault()})}else{document.querySelector(`#${HELP_BUTTON_ID} > a`).addEventListener("click",event=>{const target=event.target;if(target.tagName!=="A"||target.parentElement.id!==HELP_BUTTON_ID||event.ctrlKey||event.altKey||event.metaKey){return}event.preventDefault();const menu=getHelpMenu(true);const shouldShowHelp=menu.style.display==="none";if(shouldShowHelp){showHelp()}else{window.hidePopoverMenus()}})}setMobileTopbar();addSidebarItems();addSidebarCrates();onHashChange(null);window.addEventListener("hashchange",onHashChange);searchState.setup()}());(function(){let reset_button_timeout=null;const but=document.getElementById("copy-path");if(!but){return}but.onclick=()=>{const parent=but.parentElement;const path=[];onEach(parent.childNodes,child=>{if(child.tagName==="A"){path.push(child.textContent)}});const el=document.createElement("textarea");el.value=path.join("::");el.setAttribute("readonly","");el.style.position="absolute";el.style.left="-9999px";document.body.appendChild(el);el.select();document.execCommand("copy");document.body.removeChild(el);but.children[0].style.display="none";let tmp;if(but.childNodes.length<2){tmp=document.createTextNode("✓");but.appendChild(tmp)}else{onEachLazy(but.childNodes,e=>{if(e.nodeType===Node.TEXT_NODE){tmp=e;return true}});tmp.textContent="✓"}if(reset_button_timeout!==null){window.clearTimeout(reset_button_timeout)}function reset_button(){tmp.textContent="";reset_button_timeout=null;but.children[0].style.display=""}reset_button_timeout=window.setTimeout(reset_button,1000)}}()) \ No newline at end of file diff --git a/static.files/main-48f368f3872407c8.js b/static.files/main-48f368f3872407c8.js new file mode 100644 index 00000000..987fae42 --- /dev/null +++ b/static.files/main-48f368f3872407c8.js @@ -0,0 +1,11 @@ +"use strict";window.RUSTDOC_TOOLTIP_HOVER_MS=300;window.RUSTDOC_TOOLTIP_HOVER_EXIT_MS=450;function resourcePath(basename,extension){return getVar("root-path")+basename+getVar("resource-suffix")+extension}function hideMain(){addClass(document.getElementById(MAIN_ID),"hidden")}function showMain(){removeClass(document.getElementById(MAIN_ID),"hidden")}function blurHandler(event,parentElem,hideCallback){if(!parentElem.contains(document.activeElement)&&!parentElem.contains(event.relatedTarget)){hideCallback()}}window.rootPath=getVar("root-path");window.currentCrate=getVar("current-crate");function setMobileTopbar(){const mobileTopbar=document.querySelector(".mobile-topbar");const locationTitle=document.querySelector(".sidebar h2.location");if(mobileTopbar){const mobileTitle=document.createElement("h2");mobileTitle.className="location";if(hasClass(document.querySelector(".rustdoc"),"crate")){mobileTitle.innerText=`Crate ${window.currentCrate}`}else if(locationTitle){mobileTitle.innerHTML=locationTitle.innerHTML}mobileTopbar.appendChild(mobileTitle)}}function getVirtualKey(ev){if("key"in ev&&typeof ev.key!=="undefined"){return ev.key}const c=ev.charCode||ev.keyCode;if(c===27){return"Escape"}return String.fromCharCode(c)}const MAIN_ID="main-content";const SETTINGS_BUTTON_ID="settings-menu";const ALTERNATIVE_DISPLAY_ID="alternative-display";const NOT_DISPLAYED_ID="not-displayed";const HELP_BUTTON_ID="help-button";function getSettingsButton(){return document.getElementById(SETTINGS_BUTTON_ID)}function getHelpButton(){return document.getElementById(HELP_BUTTON_ID)}function getNakedUrl(){return window.location.href.split("?")[0].split("#")[0]}function insertAfter(newNode,referenceNode){referenceNode.parentNode.insertBefore(newNode,referenceNode.nextSibling)}function getOrCreateSection(id,classes){let el=document.getElementById(id);if(!el){el=document.createElement("section");el.id=id;el.className=classes;insertAfter(el,document.getElementById(MAIN_ID))}return el}function getAlternativeDisplayElem(){return getOrCreateSection(ALTERNATIVE_DISPLAY_ID,"content hidden")}function getNotDisplayedElem(){return getOrCreateSection(NOT_DISPLAYED_ID,"hidden")}function switchDisplayedElement(elemToDisplay){const el=getAlternativeDisplayElem();if(el.children.length>0){getNotDisplayedElem().appendChild(el.firstElementChild)}if(elemToDisplay===null){addClass(el,"hidden");showMain();return}el.appendChild(elemToDisplay);hideMain();removeClass(el,"hidden")}function browserSupportsHistoryApi(){return window.history&&typeof window.history.pushState==="function"}function preLoadCss(cssUrl){const link=document.createElement("link");link.href=cssUrl;link.rel="preload";link.as="style";document.getElementsByTagName("head")[0].appendChild(link)}(function(){const isHelpPage=window.location.pathname.endsWith("/help.html");function loadScript(url){const script=document.createElement("script");script.src=url;document.head.append(script)}getSettingsButton().onclick=event=>{if(event.ctrlKey||event.altKey||event.metaKey){return}window.hideAllModals(false);addClass(getSettingsButton(),"rotate");event.preventDefault();loadScript(getVar("static-root-path")+getVar("settings-js"));setTimeout(()=>{const themes=getVar("themes").split(",");for(const theme of themes){if(theme!==""){preLoadCss(getVar("root-path")+theme+".css")}}},0)};window.searchState={loadingText:"Loading search results...",input:document.getElementsByClassName("search-input")[0],outputElement:()=>{let el=document.getElementById("search");if(!el){el=document.createElement("section");el.id="search";getNotDisplayedElem().appendChild(el)}return el},title:document.title,titleBeforeSearch:document.title,timeout:null,currentTab:0,focusedByTab:[null,null,null],clearInputTimeout:()=>{if(searchState.timeout!==null){clearTimeout(searchState.timeout);searchState.timeout=null}},isDisplayed:()=>searchState.outputElement().parentElement.id===ALTERNATIVE_DISPLAY_ID,focus:()=>{searchState.input.focus()},defocus:()=>{searchState.input.blur()},showResults:search=>{if(search===null||typeof search==="undefined"){search=searchState.outputElement()}switchDisplayedElement(search);searchState.mouseMovedAfterSearch=false;document.title=searchState.title},removeQueryParameters:()=>{document.title=searchState.titleBeforeSearch;if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.hash)}},hideResults:()=>{switchDisplayedElement(null);searchState.removeQueryParameters()},getQueryStringParams:()=>{const params={};window.location.search.substring(1).split("&").map(s=>{const pair=s.split("=").map(x=>x.replace(/\+/g," "));params[decodeURIComponent(pair[0])]=typeof pair[1]==="undefined"?null:decodeURIComponent(pair[1])});return params},setup:()=>{const search_input=searchState.input;if(!searchState.input){return}let searchLoaded=false;function loadSearch(){if(!searchLoaded){searchLoaded=true;loadScript(getVar("static-root-path")+getVar("search-js"));loadScript(resourcePath("search-index",".js"))}}search_input.addEventListener("focus",()=>{search_input.origPlaceholder=search_input.placeholder;search_input.placeholder="Type your search here.";loadSearch()});if(search_input.value!==""){loadSearch()}const params=searchState.getQueryStringParams();if(params.search!==undefined){searchState.setLoadingSearch();loadSearch()}},setLoadingSearch:()=>{const search=searchState.outputElement();search.innerHTML="

"+searchState.loadingText+"

";searchState.showResults(search)},};const toggleAllDocsId="toggle-all-docs";let savedHash="";function handleHashes(ev){if(ev!==null&&searchState.isDisplayed()&&ev.newURL){switchDisplayedElement(null);const hash=ev.newURL.slice(ev.newURL.indexOf("#")+1);if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.search+"#"+hash)}const elem=document.getElementById(hash);if(elem){elem.scrollIntoView()}}const pageId=window.location.hash.replace(/^#/,"");if(savedHash!==pageId){savedHash=pageId;if(pageId!==""){expandSection(pageId)}}if(savedHash.startsWith("impl-")){const splitAt=savedHash.indexOf("/");if(splitAt!==-1){const implId=savedHash.slice(0,splitAt);const assocId=savedHash.slice(splitAt+1);const implElem=document.getElementById(implId);if(implElem&&implElem.parentElement.tagName==="SUMMARY"&&implElem.parentElement.parentElement.tagName==="DETAILS"){onEachLazy(implElem.parentElement.parentElement.querySelectorAll(`[id^="${assocId}"]`),item=>{const numbered=/([^-]+)-([0-9]+)/.exec(item.id);if(item.id===assocId||(numbered&&numbered[1]===assocId)){openParentDetails(item);item.scrollIntoView();setTimeout(()=>{window.location.replace("#"+item.id)},0)}})}}}}function onHashChange(ev){hideSidebar();handleHashes(ev)}function openParentDetails(elem){while(elem){if(elem.tagName==="DETAILS"){elem.open=true}elem=elem.parentNode}}function expandSection(id){openParentDetails(document.getElementById(id))}function handleEscape(ev){searchState.clearInputTimeout();searchState.hideResults();ev.preventDefault();searchState.defocus();window.hideAllModals(true)}function handleShortcut(ev){const disableShortcuts=getSettingValue("disable-shortcuts")==="true";if(ev.ctrlKey||ev.altKey||ev.metaKey||disableShortcuts){return}if(document.activeElement.tagName==="INPUT"&&document.activeElement.type!=="checkbox"&&document.activeElement.type!=="radio"){switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break}}else{switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break;case"s":case"S":ev.preventDefault();searchState.focus();break;case"+":ev.preventDefault();expandAllDocs();break;case"-":ev.preventDefault();collapseAllDocs();break;case"?":showHelp();break;default:break}}}document.addEventListener("keypress",handleShortcut);document.addEventListener("keydown",handleShortcut);function addSidebarItems(){if(!window.SIDEBAR_ITEMS){return}const sidebar=document.getElementsByClassName("sidebar-elems")[0];function block(shortty,id,longty){const filtered=window.SIDEBAR_ITEMS[shortty];if(!filtered){return}const modpath=hasClass(document.querySelector(".rustdoc"),"mod")?"../":"";const h3=document.createElement("h3");h3.innerHTML=`${longty}`;const ul=document.createElement("ul");ul.className="block "+shortty;for(const name of filtered){let path;if(shortty==="mod"){path=`${modpath}${name}/index.html`}else{path=`${modpath}${shortty}.${name}.html`}let current_page=document.location.href.toString();if(current_page.endsWith("/")){current_page+="index.html"}const link=document.createElement("a");link.href=path;if(path===current_page){link.className="current"}link.textContent=name;const li=document.createElement("li");li.appendChild(link);ul.appendChild(li)}sidebar.appendChild(h3);sidebar.appendChild(ul)}if(sidebar){block("primitive","primitives","Primitive Types");block("mod","modules","Modules");block("macro","macros","Macros");block("struct","structs","Structs");block("enum","enums","Enums");block("constant","constants","Constants");block("static","static","Statics");block("trait","traits","Traits");block("fn","functions","Functions");block("type","types","Type Aliases");block("union","unions","Unions");block("foreigntype","foreign-types","Foreign Types");block("keyword","keywords","Keywords");block("opaque","opaque-types","Opaque Types");block("attr","attributes","Attribute Macros");block("derive","derives","Derive Macros");block("traitalias","trait-aliases","Trait Aliases")}}window.register_implementors=imp=>{const implementors=document.getElementById("implementors-list");const synthetic_implementors=document.getElementById("synthetic-implementors-list");const inlined_types=new Set();const TEXT_IDX=0;const SYNTHETIC_IDX=1;const TYPES_IDX=2;if(synthetic_implementors){onEachLazy(synthetic_implementors.getElementsByClassName("impl"),el=>{const aliases=el.getAttribute("data-aliases");if(!aliases){return}aliases.split(",").forEach(alias=>{inlined_types.add(alias)})})}let currentNbImpls=implementors.getElementsByClassName("impl").length;const traitName=document.querySelector(".main-heading h1 > .trait").textContent;const baseIdName="impl-"+traitName+"-";const libs=Object.getOwnPropertyNames(imp);const script=document.querySelector("script[data-ignore-extern-crates]");const ignoreExternCrates=new Set((script?script.getAttribute("data-ignore-extern-crates"):"").split(","));for(const lib of libs){if(lib===window.currentCrate||ignoreExternCrates.has(lib)){continue}const structs=imp[lib];struct_loop:for(const struct of structs){const list=struct[SYNTHETIC_IDX]?synthetic_implementors:implementors;if(struct[SYNTHETIC_IDX]){for(const struct_type of struct[TYPES_IDX]){if(inlined_types.has(struct_type)){continue struct_loop}inlined_types.add(struct_type)}}const code=document.createElement("h3");code.innerHTML=struct[TEXT_IDX];addClass(code,"code-header");onEachLazy(code.getElementsByTagName("a"),elem=>{const href=elem.getAttribute("href");if(href&&!href.startsWith("#")&&!/^(?:[a-z+]+:)?\/\//.test(href)){elem.setAttribute("href",window.rootPath+href)}});const currentId=baseIdName+currentNbImpls;const anchor=document.createElement("a");anchor.href="#"+currentId;addClass(anchor,"anchor");const display=document.createElement("div");display.id=currentId;addClass(display,"impl");display.appendChild(anchor);display.appendChild(code);list.appendChild(display);currentNbImpls+=1}}};if(window.pending_implementors){window.register_implementors(window.pending_implementors)}window.register_type_impls=imp=>{if(!imp||!imp[window.currentCrate]){return}window.pending_type_impls=null;const idMap=new Map();let implementations=document.getElementById("implementations-list");let trait_implementations=document.getElementById("trait-implementations-list");let trait_implementations_header=document.getElementById("trait-implementations");const script=document.querySelector("script[data-self-path]");const selfPath=script?script.getAttribute("data-self-path"):null;const mainContent=document.querySelector("#main-content");const sidebarSection=document.querySelector(".sidebar section");let methods=document.querySelector(".sidebar .block.method");let associatedTypes=document.querySelector(".sidebar .block.associatedtype");let associatedConstants=document.querySelector(".sidebar .block.associatedconstant");let sidebarTraitList=document.querySelector(".sidebar .block.trait-implementation");for(const impList of imp[window.currentCrate]){const types=impList.slice(2);const text=impList[0];const isTrait=impList[1]!==0;const traitName=impList[1];if(types.indexOf(selfPath)===-1){continue}let outputList=isTrait?trait_implementations:implementations;if(outputList===null){const outputListName=isTrait?"Trait Implementations":"Implementations";const outputListId=isTrait?"trait-implementations-list":"implementations-list";const outputListHeaderId=isTrait?"trait-implementations":"implementations";const outputListHeader=document.createElement("h2");outputListHeader.id=outputListHeaderId;outputListHeader.innerText=outputListName;outputList=document.createElement("div");outputList.id=outputListId;if(isTrait){const link=document.createElement("a");link.href=`#${outputListHeaderId}`;link.innerText="Trait Implementations";const h=document.createElement("h3");h.appendChild(link);trait_implementations=outputList;trait_implementations_header=outputListHeader;sidebarSection.appendChild(h);sidebarTraitList=document.createElement("ul");sidebarTraitList.className="block trait-implementation";sidebarSection.appendChild(sidebarTraitList);mainContent.appendChild(outputListHeader);mainContent.appendChild(outputList)}else{implementations=outputList;if(trait_implementations){mainContent.insertBefore(outputListHeader,trait_implementations_header);mainContent.insertBefore(outputList,trait_implementations_header)}else{const mainContent=document.querySelector("#main-content");mainContent.appendChild(outputListHeader);mainContent.appendChild(outputList)}}}const template=document.createElement("template");template.innerHTML=text;onEachLazy(template.content.querySelectorAll("a"),elem=>{const href=elem.getAttribute("href");if(href&&!href.startsWith("#")&&!/^(?:[a-z+]+:)?\/\//.test(href)){elem.setAttribute("href",window.rootPath+href)}});onEachLazy(template.content.querySelectorAll("[id]"),el=>{let i=0;if(idMap.has(el.id)){i=idMap.get(el.id)}else if(document.getElementById(el.id)){i=1;while(document.getElementById(`${el.id}-${2 * i}`)){i=2*i}while(document.getElementById(`${el.id}-${i}`)){i+=1}}if(i!==0){const oldHref=`#${el.id}`;const newHref=`#${el.id}-${i}`;el.id=`${el.id}-${i}`;onEachLazy(template.content.querySelectorAll("a[href]"),link=>{if(link.getAttribute("href")===oldHref){link.href=newHref}})}idMap.set(el.id,i+1)});const templateAssocItems=template.content.querySelectorAll("section.tymethod, "+"section.method, section.associatedtype, section.associatedconstant");if(isTrait){const li=document.createElement("li");const a=document.createElement("a");a.href=`#${template.content.querySelector(".impl").id}`;a.textContent=traitName;li.appendChild(a);sidebarTraitList.append(li)}else{onEachLazy(templateAssocItems,item=>{let block=hasClass(item,"associatedtype")?associatedTypes:(hasClass(item,"associatedconstant")?associatedConstants:(methods));if(!block){const blockTitle=hasClass(item,"associatedtype")?"Associated Types":(hasClass(item,"associatedconstant")?"Associated Constants":("Methods"));const blockClass=hasClass(item,"associatedtype")?"associatedtype":(hasClass(item,"associatedconstant")?"associatedconstant":("method"));const blockHeader=document.createElement("h3");const blockLink=document.createElement("a");blockLink.href="#implementations";blockLink.innerText=blockTitle;blockHeader.appendChild(blockLink);block=document.createElement("ul");block.className=`block ${blockClass}`;const insertionReference=methods||sidebarTraitList;if(insertionReference){const insertionReferenceH=insertionReference.previousElementSibling;sidebarSection.insertBefore(blockHeader,insertionReferenceH);sidebarSection.insertBefore(block,insertionReferenceH)}else{sidebarSection.appendChild(blockHeader);sidebarSection.appendChild(block)}if(hasClass(item,"associatedtype")){associatedTypes=block}else if(hasClass(item,"associatedconstant")){associatedConstants=block}else{methods=block}}const li=document.createElement("li");const a=document.createElement("a");a.innerText=item.id.split("-")[0].split(".")[1];a.href=`#${item.id}`;li.appendChild(a);block.appendChild(li)})}outputList.appendChild(template.content)}for(const list of[methods,associatedTypes,associatedConstants,sidebarTraitList]){if(!list){continue}const newChildren=Array.prototype.slice.call(list.children);newChildren.sort((a,b)=>{const aI=a.innerText;const bI=b.innerText;return aIbI?1:0});list.replaceChildren(...newChildren)}};if(window.pending_type_impls){window.register_type_impls(window.pending_type_impls)}function addSidebarCrates(){if(!window.ALL_CRATES){return}const sidebarElems=document.getElementsByClassName("sidebar-elems")[0];if(!sidebarElems){return}const h3=document.createElement("h3");h3.innerHTML="Crates";const ul=document.createElement("ul");ul.className="block crate";for(const crate of window.ALL_CRATES){const link=document.createElement("a");link.href=window.rootPath+crate+"/index.html";link.textContent=crate;const li=document.createElement("li");if(window.rootPath!=="./"&&crate===window.currentCrate){li.className="current"}li.appendChild(link);ul.appendChild(li)}sidebarElems.appendChild(h3);sidebarElems.appendChild(ul)}function expandAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);removeClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hasClass(e,"type-contents-toggle")&&!hasClass(e,"more-examples-toggle")){e.open=true}});innerToggle.title="collapse all docs";innerToggle.children[0].innerText="\u2212"}function collapseAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);addClass(innerToggle,"will-expand");onEachLazy(document.getElementsByClassName("toggle"),e=>{if(e.parentNode.id!=="implementations-list"||(!hasClass(e,"implementors-toggle")&&!hasClass(e,"type-contents-toggle"))){e.open=false}});innerToggle.title="expand all docs";innerToggle.children[0].innerText="+"}function toggleAllDocs(){const innerToggle=document.getElementById(toggleAllDocsId);if(!innerToggle){return}if(hasClass(innerToggle,"will-expand")){expandAllDocs()}else{collapseAllDocs()}}(function(){const toggles=document.getElementById(toggleAllDocsId);if(toggles){toggles.onclick=toggleAllDocs}const hideMethodDocs=getSettingValue("auto-hide-method-docs")==="true";const hideImplementations=getSettingValue("auto-hide-trait-implementations")==="true";const hideLargeItemContents=getSettingValue("auto-hide-large-items")!=="false";function setImplementorsTogglesOpen(id,open){const list=document.getElementById(id);if(list!==null){onEachLazy(list.getElementsByClassName("implementors-toggle"),e=>{e.open=open})}}if(hideImplementations){setImplementorsTogglesOpen("trait-implementations-list",false);setImplementorsTogglesOpen("blanket-implementations-list",false)}onEachLazy(document.getElementsByClassName("toggle"),e=>{if(!hideLargeItemContents&&hasClass(e,"type-contents-toggle")){e.open=true}if(hideMethodDocs&&hasClass(e,"method-toggle")){e.open=false}})}());window.rustdoc_add_line_numbers_to_examples=()=>{onEachLazy(document.getElementsByClassName("rust-example-rendered"),x=>{const parent=x.parentNode;const line_numbers=parent.querySelectorAll(".example-line-numbers");if(line_numbers.length>0){return}const count=x.textContent.split("\n").length;const elems=[];for(let i=0;i{onEachLazy(document.getElementsByClassName("rust-example-rendered"),x=>{const parent=x.parentNode;const line_numbers=parent.querySelectorAll(".example-line-numbers");for(const node of line_numbers){parent.removeChild(node)}})};if(getSettingValue("line-numbers")==="true"){window.rustdoc_add_line_numbers_to_examples()}function showSidebar(){window.hideAllModals(false);const sidebar=document.getElementsByClassName("sidebar")[0];addClass(sidebar,"shown")}function hideSidebar(){const sidebar=document.getElementsByClassName("sidebar")[0];removeClass(sidebar,"shown")}window.addEventListener("resize",()=>{if(window.CURRENT_TOOLTIP_ELEMENT){const base=window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE;const force_visible=base.TOOLTIP_FORCE_VISIBLE;hideTooltip(false);if(force_visible){showTooltip(base);base.TOOLTIP_FORCE_VISIBLE=true}}});const mainElem=document.getElementById(MAIN_ID);if(mainElem){mainElem.addEventListener("click",hideSidebar)}onEachLazy(document.querySelectorAll("a[href^='#']"),el=>{el.addEventListener("click",()=>{expandSection(el.hash.slice(1));hideSidebar()})});onEachLazy(document.querySelectorAll(".toggle > summary:not(.hideme)"),el=>{el.addEventListener("click",e=>{if(e.target.tagName!=="SUMMARY"&&e.target.tagName!=="A"){e.preventDefault()}})});function showTooltip(e){const notable_ty=e.getAttribute("data-notable-ty");if(!window.NOTABLE_TRAITS&¬able_ty){const data=document.getElementById("notable-traits-data");if(data){window.NOTABLE_TRAITS=JSON.parse(data.innerText)}else{throw new Error("showTooltip() called with notable without any notable traits!")}}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE===e){clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);return}window.hideAllModals(false);const wrapper=document.createElement("div");if(notable_ty){wrapper.innerHTML="
"+window.NOTABLE_TRAITS[notable_ty]+"
"}else{if(e.getAttribute("title")!==null){e.setAttribute("data-title",e.getAttribute("title"));e.removeAttribute("title")}if(e.getAttribute("data-title")!==null){const titleContent=document.createElement("div");titleContent.className="content";titleContent.appendChild(document.createTextNode(e.getAttribute("data-title")));wrapper.appendChild(titleContent)}}wrapper.className="tooltip popover";const focusCatcher=document.createElement("div");focusCatcher.setAttribute("tabindex","0");focusCatcher.onfocus=hideTooltip;wrapper.appendChild(focusCatcher);const pos=e.getBoundingClientRect();wrapper.style.top=(pos.top+window.scrollY+pos.height)+"px";wrapper.style.left=0;wrapper.style.right="auto";wrapper.style.visibility="hidden";const body=document.getElementsByTagName("body")[0];body.appendChild(wrapper);const wrapperPos=wrapper.getBoundingClientRect();const finalPos=pos.left+window.scrollX-wrapperPos.width+24;if(finalPos>0){wrapper.style.left=finalPos+"px"}else{wrapper.style.setProperty("--popover-arrow-offset",(wrapperPos.right-pos.right+4)+"px")}wrapper.style.visibility="";window.CURRENT_TOOLTIP_ELEMENT=wrapper;window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE=e;clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);wrapper.onpointerenter=ev=>{if(ev.pointerType!=="mouse"){return}clearTooltipHoverTimeout(e)};wrapper.onpointerleave=ev=>{if(ev.pointerType!=="mouse"){return}if(!e.TOOLTIP_FORCE_VISIBLE&&!e.contains(ev.relatedTarget)){setTooltipHoverTimeout(e,false);addClass(wrapper,"fade-out")}}}function setTooltipHoverTimeout(element,show){clearTooltipHoverTimeout(element);if(!show&&!window.CURRENT_TOOLTIP_ELEMENT){return}if(show&&window.CURRENT_TOOLTIP_ELEMENT){return}if(window.CURRENT_TOOLTIP_ELEMENT&&window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE!==element){return}element.TOOLTIP_HOVER_TIMEOUT=setTimeout(()=>{if(show){showTooltip(element)}else if(!element.TOOLTIP_FORCE_VISIBLE){hideTooltip(false)}},show?window.RUSTDOC_TOOLTIP_HOVER_MS:window.RUSTDOC_TOOLTIP_HOVER_EXIT_MS)}function clearTooltipHoverTimeout(element){if(element.TOOLTIP_HOVER_TIMEOUT!==undefined){removeClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out");clearTimeout(element.TOOLTIP_HOVER_TIMEOUT);delete element.TOOLTIP_HOVER_TIMEOUT}}function tooltipBlurHandler(event){if(window.CURRENT_TOOLTIP_ELEMENT&&!window.CURRENT_TOOLTIP_ELEMENT.contains(document.activeElement)&&!window.CURRENT_TOOLTIP_ELEMENT.contains(event.relatedTarget)&&!window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.contains(document.activeElement)&&!window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.contains(event.relatedTarget)){setTimeout(()=>hideTooltip(false),0)}}function hideTooltip(focus){if(window.CURRENT_TOOLTIP_ELEMENT){if(window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE){if(focus){window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.focus()}window.CURRENT_TOOLTIP_ELEMENT.TOOLTIP_BASE.TOOLTIP_FORCE_VISIBLE=false}const body=document.getElementsByTagName("body")[0];body.removeChild(window.CURRENT_TOOLTIP_ELEMENT);clearTooltipHoverTimeout(window.CURRENT_TOOLTIP_ELEMENT);window.CURRENT_TOOLTIP_ELEMENT=null}}onEachLazy(document.getElementsByClassName("tooltip"),e=>{e.onclick=()=>{e.TOOLTIP_FORCE_VISIBLE=e.TOOLTIP_FORCE_VISIBLE?false:true;if(window.CURRENT_TOOLTIP_ELEMENT&&!e.TOOLTIP_FORCE_VISIBLE){hideTooltip(true)}else{showTooltip(e);window.CURRENT_TOOLTIP_ELEMENT.setAttribute("tabindex","0");window.CURRENT_TOOLTIP_ELEMENT.focus();window.CURRENT_TOOLTIP_ELEMENT.onblur=tooltipBlurHandler}return false};e.onpointerenter=ev=>{if(ev.pointerType!=="mouse"){return}setTooltipHoverTimeout(e,true)};e.onpointermove=ev=>{if(ev.pointerType!=="mouse"){return}setTooltipHoverTimeout(e,true)};e.onpointerleave=ev=>{if(ev.pointerType!=="mouse"){return}if(!e.TOOLTIP_FORCE_VISIBLE&&window.CURRENT_TOOLTIP_ELEMENT&&!window.CURRENT_TOOLTIP_ELEMENT.contains(ev.relatedTarget)){setTooltipHoverTimeout(e,false);addClass(window.CURRENT_TOOLTIP_ELEMENT,"fade-out")}}});const sidebar_menu_toggle=document.getElementsByClassName("sidebar-menu-toggle")[0];if(sidebar_menu_toggle){sidebar_menu_toggle.addEventListener("click",()=>{const sidebar=document.getElementsByClassName("sidebar")[0];if(!hasClass(sidebar,"shown")){showSidebar()}else{hideSidebar()}})}function helpBlurHandler(event){blurHandler(event,getHelpButton(),window.hidePopoverMenus)}function buildHelpMenu(){const book_info=document.createElement("span");const channel=getVar("channel");book_info.className="top";book_info.innerHTML=`You can find more information in \ +the rustdoc book.`;const shortcuts=[["?","Show this help dialog"],["S","Focus the search field"],["↑","Move up in search results"],["↓","Move down in search results"],["← / →","Switch result tab (when results focused)"],["⏎","Go to active search result"],["+","Expand all sections"],["-","Collapse all sections"],].map(x=>"
"+x[0].split(" ").map((y,index)=>((index&1)===0?""+y+"":" "+y+" ")).join("")+"
"+x[1]+"
").join("");const div_shortcuts=document.createElement("div");addClass(div_shortcuts,"shortcuts");div_shortcuts.innerHTML="

Keyboard Shortcuts

"+shortcuts+"
";const infos=[`For a full list of all search features, take a look here.`,"Prefix searches with a type followed by a colon (e.g., fn:) to \ + restrict the search to a given item kind.","Accepted kinds are: fn, mod, struct, \ + enum, trait, type, macro, \ + and const.","Search functions by type signature (e.g., vec -> usize or \ + -> vec or String, enum:Cow -> bool)","You can look for items with an exact name by putting double quotes around \ + your request: \"string\"","Look for functions that accept or return \ + slices and \ + arrays by writing \ + square brackets (e.g., -> [u8] or [] -> Option)","Look for items inside another one by searching for a path: vec::Vec",].map(x=>"

"+x+"

").join("");const div_infos=document.createElement("div");addClass(div_infos,"infos");div_infos.innerHTML="

Search Tricks

"+infos;const rustdoc_version=document.createElement("span");rustdoc_version.className="bottom";const rustdoc_version_code=document.createElement("code");rustdoc_version_code.innerText="rustdoc "+getVar("rustdoc-version");rustdoc_version.appendChild(rustdoc_version_code);const container=document.createElement("div");if(!isHelpPage){container.className="popover"}container.id="help";container.style.display="none";const side_by_side=document.createElement("div");side_by_side.className="side-by-side";side_by_side.appendChild(div_shortcuts);side_by_side.appendChild(div_infos);container.appendChild(book_info);container.appendChild(side_by_side);container.appendChild(rustdoc_version);if(isHelpPage){const help_section=document.createElement("section");help_section.appendChild(container);document.getElementById("main-content").appendChild(help_section);container.style.display="block"}else{const help_button=getHelpButton();help_button.appendChild(container);container.onblur=helpBlurHandler;help_button.onblur=helpBlurHandler;help_button.children[0].onblur=helpBlurHandler}return container}window.hideAllModals=switchFocus=>{hideSidebar();window.hidePopoverMenus();hideTooltip(switchFocus)};window.hidePopoverMenus=()=>{onEachLazy(document.querySelectorAll(".search-form .popover"),elem=>{elem.style.display="none"})};function getHelpMenu(buildNeeded){let menu=getHelpButton().querySelector(".popover");if(!menu&&buildNeeded){menu=buildHelpMenu()}return menu}function showHelp(){getHelpButton().querySelector("a").focus();const menu=getHelpMenu(true);if(menu.style.display==="none"){window.hideAllModals();menu.style.display=""}}if(isHelpPage){showHelp();document.querySelector(`#${HELP_BUTTON_ID} > a`).addEventListener("click",event=>{const target=event.target;if(target.tagName!=="A"||target.parentElement.id!==HELP_BUTTON_ID||event.ctrlKey||event.altKey||event.metaKey){return}event.preventDefault()})}else{document.querySelector(`#${HELP_BUTTON_ID} > a`).addEventListener("click",event=>{const target=event.target;if(target.tagName!=="A"||target.parentElement.id!==HELP_BUTTON_ID||event.ctrlKey||event.altKey||event.metaKey){return}event.preventDefault();const menu=getHelpMenu(true);const shouldShowHelp=menu.style.display==="none";if(shouldShowHelp){showHelp()}else{window.hidePopoverMenus()}})}setMobileTopbar();addSidebarItems();addSidebarCrates();onHashChange(null);window.addEventListener("hashchange",onHashChange);searchState.setup()}());(function(){const SIDEBAR_MIN=100;const SIDEBAR_MAX=500;const RUSTDOC_MOBILE_BREAKPOINT=700;const BODY_MIN=400;const SIDEBAR_VANISH_THRESHOLD=SIDEBAR_MIN/2;const sidebarButton=document.getElementById("sidebar-button");if(sidebarButton){sidebarButton.addEventListener("click",e=>{removeClass(document.documentElement,"hide-sidebar");updateLocalStorage("hide-sidebar","false");if(document.querySelector(".rustdoc.src")){window.rustdocToggleSrcSidebar()}e.preventDefault()})}let currentPointerId=null;let desiredSidebarSize=null;let pendingSidebarResizingFrame=false;const resizer=document.querySelector(".sidebar-resizer");const sidebar=document.querySelector(".sidebar");if(!resizer||!sidebar){return}const isSrcPage=hasClass(document.body,"src");function hideSidebar(){if(isSrcPage){window.rustdocCloseSourceSidebar();updateLocalStorage("src-sidebar-width",null);document.documentElement.style.removeProperty("--src-sidebar-width");sidebar.style.removeProperty("--src-sidebar-width");resizer.style.removeProperty("--src-sidebar-width")}else{addClass(document.documentElement,"hide-sidebar");updateLocalStorage("hide-sidebar","true");updateLocalStorage("desktop-sidebar-width",null);document.documentElement.style.removeProperty("--desktop-sidebar-width");sidebar.style.removeProperty("--desktop-sidebar-width");resizer.style.removeProperty("--desktop-sidebar-width")}}function showSidebar(){if(isSrcPage){window.rustdocShowSourceSidebar()}else{removeClass(document.documentElement,"hide-sidebar");updateLocalStorage("hide-sidebar","false")}}function changeSidebarSize(size){if(isSrcPage){updateLocalStorage("src-sidebar-width",size);sidebar.style.setProperty("--src-sidebar-width",size+"px");resizer.style.setProperty("--src-sidebar-width",size+"px")}else{updateLocalStorage("desktop-sidebar-width",size);sidebar.style.setProperty("--desktop-sidebar-width",size+"px");resizer.style.setProperty("--desktop-sidebar-width",size+"px")}}function isSidebarHidden(){return isSrcPage?!hasClass(document.documentElement,"src-sidebar-expanded"):hasClass(document.documentElement,"hide-sidebar")}function resize(e){if(currentPointerId===null||currentPointerId!==e.pointerId){return}e.preventDefault();const pos=e.clientX-3;if(pos=SIDEBAR_MIN){if(isSidebarHidden()){showSidebar()}const constrainedPos=Math.min(pos,window.innerWidth-BODY_MIN,SIDEBAR_MAX);changeSidebarSize(constrainedPos);desiredSidebarSize=constrainedPos;if(pendingSidebarResizingFrame!==false){clearTimeout(pendingSidebarResizingFrame)}pendingSidebarResizingFrame=setTimeout(()=>{if(currentPointerId===null||pendingSidebarResizingFrame===false){return}pendingSidebarResizingFrame=false;document.documentElement.style.setProperty("--resizing-sidebar-width",desiredSidebarSize+"px")},100)}}window.addEventListener("resize",()=>{if(window.innerWidth=(window.innerWidth-BODY_MIN)){changeSidebarSize(window.innerWidth-BODY_MIN)}else if(desiredSidebarSize!==null&&desiredSidebarSize>SIDEBAR_MIN){changeSidebarSize(desiredSidebarSize)}});function stopResize(e){if(currentPointerId===null){return}if(e){e.preventDefault()}desiredSidebarSize=sidebar.getBoundingClientRect().width;removeClass(resizer,"active");window.removeEventListener("pointermove",resize,false);window.removeEventListener("pointerup",stopResize,false);removeClass(document.documentElement,"sidebar-resizing");document.documentElement.style.removeProperty("--resizing-sidebar-width");if(resizer.releasePointerCapture){resizer.releasePointerCapture(currentPointerId);currentPointerId=null}}function initResize(e){if(currentPointerId!==null||e.altKey||e.ctrlKey||e.metaKey||e.button!==0){return}if(resizer.setPointerCapture){resizer.setPointerCapture(e.pointerId);if(!resizer.hasPointerCapture(e.pointerId)){resizer.releasePointerCapture(e.pointerId);return}currentPointerId=e.pointerId}window.hideAllModals(false);e.preventDefault();window.addEventListener("pointermove",resize,false);window.addEventListener("pointercancel",stopResize,false);window.addEventListener("pointerup",stopResize,false);addClass(resizer,"active");addClass(document.documentElement,"sidebar-resizing");const pos=e.clientX-sidebar.offsetLeft-3;document.documentElement.style.setProperty("--resizing-sidebar-width",pos+"px");desiredSidebarSize=null}resizer.addEventListener("pointerdown",initResize,false)}());(function(){let reset_button_timeout=null;const but=document.getElementById("copy-path");if(!but){return}but.onclick=()=>{const parent=but.parentElement;const path=[];onEach(parent.childNodes,child=>{if(child.tagName==="A"){path.push(child.textContent)}});const el=document.createElement("textarea");el.value=path.join("::");el.setAttribute("readonly","");el.style.position="absolute";el.style.left="-9999px";document.body.appendChild(el);el.select();document.execCommand("copy");document.body.removeChild(el);but.children[0].style.display="none";let tmp;if(but.childNodes.length<2){tmp=document.createTextNode("✓");but.appendChild(tmp)}else{onEachLazy(but.childNodes,e=>{if(e.nodeType===Node.TEXT_NODE){tmp=e;return true}});tmp.textContent="✓"}if(reset_button_timeout!==null){window.clearTimeout(reset_button_timeout)}function reset_button(){tmp.textContent="";reset_button_timeout=null;but.children[0].style.display=""}reset_button_timeout=window.setTimeout(reset_button,1000)}}()) \ No newline at end of file diff --git a/static.files/noscript-04d5337699b92874.css b/static.files/noscript-04d5337699b92874.css new file mode 100644 index 00000000..fbd55f57 --- /dev/null +++ b/static.files/noscript-04d5337699b92874.css @@ -0,0 +1 @@ + #main-content .attributes{margin-left:0 !important;}#copy-path,#sidebar-button,.sidebar-resizer{display:none !important;}nav.sub{display:none;}.src .sidebar{display:none;}.notable-traits{display:none;}:root{--main-background-color:white;--main-color:black;--settings-input-color:#2196f3;--settings-input-border-color:#717171;--settings-button-color:#000;--settings-button-border-focus:#717171;--sidebar-background-color:#f5f5f5;--sidebar-background-color-hover:#e0e0e0;--code-block-background-color:#f5f5f5;--scrollbar-track-background-color:#dcdcdc;--scrollbar-thumb-background-color:rgba(36,37,39,0.6);--scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;--headings-border-bottom-color:#ddd;--border-color:#e0e0e0;--button-background-color:#fff;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:none;--mobile-sidebar-menu-filter:none;--search-input-focused-border-color:#66afe9;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(35%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ad378a;--trait-link-color:#6e4fc9;--assoc-item-link-color:#3873ad;--function-link-color:#ad7c37;--macro-link-color:#068000;--keyword-link-color:#3873ad;--mod-link-color:#3873ad;--link-color:#3873ad;--sidebar-link-color:#356da4;--sidebar-current-link-background-color:#fff;--search-result-link-focus-background-color:#ccc;--search-result-border-color:#aaa3;--search-color:#000;--search-error-code-background-color:#d0cccc;--search-results-alias-color:#000;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#e6e6e6;--search-tab-button-not-selected-background:#e6e6e6;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#fff;--stab-background-color:#fff5d6;--stab-code-color:#000;--code-highlight-kw-color:#8959a8;--code-highlight-kw-2-color:#4271ae;--code-highlight-lifetime-color:#b76514;--code-highlight-prelude-color:#4271ae;--code-highlight-prelude-val-color:#c82829;--code-highlight-number-color:#718c00;--code-highlight-string-color:#718c00;--code-highlight-literal-color:#c82829;--code-highlight-attribute-color:#c82829;--code-highlight-self-color:#c82829;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8e908c;--code-highlight-doc-comment-color:#4d4d4c;--src-line-numbers-span-color:#c67e2d;--src-line-number-highlighted-background-color:#fdffd3;--test-arrow-color:#f5f5f5;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#f5f5f5;--test-arrow-hover-background-color:rgb(78,139,202);--target-background-color:#fdffd3;--target-border-color:#ad7c37;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:initial;--crate-search-div-filter:invert(100%) sepia(0%) saturate(4223%) hue-rotate(289deg) brightness(114%) contrast(76%);--crate-search-div-hover-filter:invert(44%) sepia(18%) saturate(23%) hue-rotate(317deg) brightness(96%) contrast(93%);--crate-search-hover-border:#717171;--src-sidebar-background-selected:#fff;--src-sidebar-background-hover:#e0e0e0;--table-alt-row-background-color:#f5f5f5;--codeblock-link-background:#eee;--scrape-example-toggle-line-background:#ccc;--scrape-example-toggle-line-hover-background:#999;--scrape-example-code-line-highlight:#fcffd6;--scrape-example-code-line-highlight-focus:#f6fdb0;--scrape-example-help-border-color:#555;--scrape-example-help-color:#333;--scrape-example-help-hover-border-color:#000;--scrape-example-help-hover-color:#000;--scrape-example-code-wrapper-background-start:rgba(255,255,255,1);--scrape-example-code-wrapper-background-end:rgba(255,255,255,0);--sidebar-resizer-hover:hsl(207,90%,66%);--sidebar-resizer-active:hsl(207,90%,54%);}@media (prefers-color-scheme:dark){:root{--main-background-color:#353535;--main-color:#ddd;--settings-input-color:#2196f3;--settings-input-border-color:#999;--settings-button-color:#000;--settings-button-border-focus:#ffb900;--sidebar-background-color:#505050;--sidebar-background-color-hover:#676767;--code-block-background-color:#2A2A2A;--scrollbar-track-background-color:#717171;--scrollbar-thumb-background-color:rgba(32,34,37,.6);--scrollbar-color:rgba(32,34,37,.6) #5a5a5a;--headings-border-bottom-color:#d2d2d2;--border-color:#e0e0e0;--button-background-color:#f0f0f0;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--mobile-sidebar-menu-filter:invert(100%);--search-input-focused-border-color:#008dfd;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(65%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#2dbfb8;--trait-link-color:#b78cf2;--assoc-item-link-color:#d2991d;--function-link-color:#2bab63;--macro-link-color:#09bd00;--keyword-link-color:#d2991d;--mod-link-color:#d2991d;--link-color:#d2991d;--sidebar-link-color:#fdbf35;--sidebar-current-link-background-color:#444;--search-result-link-focus-background-color:#616161;--search-result-border-color:#aaa3;--search-color:#111;--search-error-code-background-color:#484848;--search-results-alias-color:#fff;--search-results-grey-color:#ccc;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#252525;--search-tab-button-not-selected-background:#252525;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#353535;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ab8ac1;--code-highlight-kw-2-color:#769acb;--code-highlight-lifetime-color:#d97f26;--code-highlight-prelude-color:#769acb;--code-highlight-prelude-val-color:#ee6868;--code-highlight-number-color:#83a300;--code-highlight-string-color:#83a300;--code-highlight-literal-color:#ee6868;--code-highlight-attribute-color:#ee6868;--code-highlight-self-color:#ee6868;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8d8d8b;--code-highlight-doc-comment-color:#8ca375;--src-line-numbers-span-color:#3b91e2;--src-line-number-highlighted-background-color:#0a042f;--test-arrow-color:#dedede;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#dedede;--test-arrow-hover-background-color:#4e8bca;--target-background-color:#494a3d;--target-border-color:#bb7410;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(94%) sepia(0%) saturate(721%) hue-rotate(255deg) brightness(90%) contrast(90%);--crate-search-div-hover-filter:invert(69%) sepia(60%) saturate(6613%) hue-rotate(184deg) brightness(100%) contrast(91%);--crate-search-hover-border:#2196f3;--src-sidebar-background-selected:#333;--src-sidebar-background-hover:#444;--table-alt-row-background-color:#2a2a2a;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(53,53,53,1);--scrape-example-code-wrapper-background-end:rgba(53,53,53,0);--sidebar-resizer-hover:hsl(207,30%,54%);--sidebar-resizer-active:hsl(207,90%,54%);}} \ No newline at end of file diff --git a/static.files/noscript-13285aec31fa243e.css b/static.files/noscript-13285aec31fa243e.css deleted file mode 100644 index c32e0cb1..00000000 --- a/static.files/noscript-13285aec31fa243e.css +++ /dev/null @@ -1 +0,0 @@ - #main-content .attributes{margin-left:0 !important;}#copy-path{display:none;}nav.sub{display:none;}.source .sidebar{display:none;}.notable-traits{display:none;} \ No newline at end of file diff --git a/static.files/rustdoc-5bc39a1768837dd0.css b/static.files/rustdoc-5bc39a1768837dd0.css new file mode 100644 index 00000000..175164ef --- /dev/null +++ b/static.files/rustdoc-5bc39a1768837dd0.css @@ -0,0 +1,24 @@ + :root{--nav-sub-mobile-padding:8px;--search-typename-width:6.75rem;--desktop-sidebar-width:200px;--src-sidebar-width:300px;--desktop-sidebar-z-index:100;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular-018c141bf0843ffd.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium-8f9a781e4970d388.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:400;src:local('Source Serif 4'),url("SourceSerif4-Regular-46f98efaafac5295.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:italic;font-weight:400;src:local('Source Serif 4 Italic'),url("SourceSerif4-It-acdfaf1a8af734b1.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:700;src:local('Source Serif 4 Bold'),url("SourceSerif4-Bold-a2c9cd1067f8b328.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It-1cc31594bf4f1f79.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'NanumBarunGothic';src:url("NanumBarunGothic-0f09457c7a19b7c6.ttf.woff2") format("woff2");font-display:swap;unicode-range:U+AC00-D7AF,U+1100-11FF,U+3130-318F,U+A960-A97F,U+D7B0-D7FF;}*{box-sizing:border-box;}body{font:1rem/1.5 "Source Serif 4",NanumBarunGothic,serif;margin:0;position:relative;overflow-wrap:break-word;overflow-wrap:anywhere;font-feature-settings:"kern","liga";background-color:var(--main-background-color);color:var(--main-color);}h1{font-size:1.5rem;}h2{font-size:1.375rem;}h3{font-size:1.25rem;}h1,h2,h3,h4,h5,h6{font-weight:500;}h1,h2,h3,h4{margin:25px 0 15px 0;padding-bottom:6px;}.docblock h3,.docblock h4,h5,h6{margin:15px 0 5px 0;}.docblock>h2:first-child,.docblock>h3:first-child,.docblock>h4:first-child,.docblock>h5:first-child,.docblock>h6:first-child{margin-top:0;}.main-heading h1{margin:0;padding:0;flex-grow:1;overflow-wrap:break-word;overflow-wrap:anywhere;}.main-heading{display:flex;flex-wrap:wrap;padding-bottom:6px;margin-bottom:15px;}.content h2,.top-doc .docblock>h3,.top-doc .docblock>h4{border-bottom:1px solid var(--headings-border-bottom-color);}h1,h2{line-height:1.25;padding-top:3px;padding-bottom:9px;}h3.code-header{font-size:1.125rem;}h4.code-header{font-size:1rem;}.code-header{font-weight:600;margin:0;padding:0;white-space:pre-wrap;}#crate-search,h1,h2,h3,h4,h5,h6,.sidebar,.mobile-topbar,.search-input,.search-results .result-name,.item-name>a,.out-of-band,span.since,a.src,#help-button>a,summary.hideme,.scraped-example-list,ul.all-items{font-family:"Fira Sans",Arial,NanumBarunGothic,sans-serif;}#toggle-all-docs,a.anchor,.section-header a,#src-sidebar a,.rust a,.sidebar h2 a,.sidebar h3 a,.mobile-topbar h2 a,h1 a,.search-results a,.stab,.result-name i{color:var(--main-color);}span.enum,a.enum,span.struct,a.struct,span.union,a.union,span.primitive,a.primitive,span.type,a.type,span.foreigntype,a.foreigntype{color:var(--type-link-color);}span.trait,a.trait,span.traitalias,a.traitalias{color:var(--trait-link-color);}span.associatedtype,a.associatedtype,span.constant,a.constant,span.static,a.static{color:var(--assoc-item-link-color);}span.fn,a.fn,span.method,a.method,span.tymethod,a.tymethod{color:var(--function-link-color);}span.attr,a.attr,span.derive,a.derive,span.macro,a.macro{color:var(--macro-link-color);}span.mod,a.mod{color:var(--mod-link-color);}span.keyword,a.keyword{color:var(--keyword-link-color);}a{color:var(--link-color);text-decoration:none;}ol,ul{padding-left:24px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.625em;}p,.docblock>.warning{margin:0 0 .75em 0;}p:last-child,.docblock>.warning:last-child{margin:0;}button{padding:1px 6px;cursor:pointer;}button#toggle-all-docs{padding:0;background:none;border:none;-webkit-appearance:none;opacity:1;}.rustdoc{display:flex;flex-direction:row;flex-wrap:nowrap;}main{position:relative;flex-grow:1;padding:10px 15px 40px 45px;min-width:0;}.src main{padding:15px;}.width-limiter{max-width:960px;margin-right:auto;}details:not(.toggle) summary{margin-bottom:.6em;}code,pre,a.test-arrow,.code-header{font-family:"Source Code Pro",monospace;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.125em;}.docblock pre code,.docblock-short pre code{padding:0;}pre{padding:14px;line-height:1.5;}pre.item-decl{overflow-x:auto;}.item-decl .type-contents-toggle{contain:initial;}.src .content pre{padding:20px;}.rustdoc.src .example-wrap pre.src-line-numbers{padding:20px 0 20px 4px;}img{max-width:100%;}.logo-container{line-height:0;display:block;}.rust-logo{filter:var(--rust-logo-filter);}.sidebar{font-size:0.875rem;flex:0 0 var(--desktop-sidebar-width);width:var(--desktop-sidebar-width);overflow-y:scroll;overscroll-behavior:contain;position:sticky;height:100vh;top:0;left:0;z-index:var(--desktop-sidebar-z-index);}.rustdoc.src .sidebar{flex-basis:50px;width:50px;border-right:1px solid;overflow-x:hidden;overflow-y:hidden;}.hide-sidebar .sidebar,.hide-sidebar .sidebar-resizer{display:none;}.sidebar-resizer{touch-action:none;width:9px;cursor:col-resize;z-index:calc(var(--desktop-sidebar-z-index) + 1);position:fixed;height:100%;left:calc(var(--desktop-sidebar-width) + 1px);}.rustdoc.src .sidebar-resizer{left:49px;}.src-sidebar-expanded .src .sidebar-resizer{left:var(--src-sidebar-width);}.sidebar-resizing{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;}.sidebar-resizing*{cursor:col-resize !important;}.sidebar-resizing .sidebar{position:fixed;}.sidebar-resizing>body{padding-left:var(--resizing-sidebar-width);}.sidebar-resizer:hover,.sidebar-resizer:active,.sidebar-resizer:focus,.sidebar-resizer.active{width:10px;margin:0;left:var(--desktop-sidebar-width);border-left:solid 1px var(--sidebar-resizer-hover);}.src-sidebar-expanded .rustdoc.src .sidebar-resizer:hover,.src-sidebar-expanded .rustdoc.src .sidebar-resizer:active,.src-sidebar-expanded .rustdoc.src .sidebar-resizer:focus,.src-sidebar-expanded .rustdoc.src .sidebar-resizer.active{left:calc(var(--src-sidebar-width) - 1px);}@media (pointer:coarse){.sidebar-resizer{display:none !important;}}.sidebar-resizer.active{padding:0 140px;width:2px;margin-left:-140px;border-left:none;}.sidebar-resizer.active:before{border-left:solid 2px var(--sidebar-resizer-active);display:block;height:100%;content:"";}.sidebar,.mobile-topbar,.sidebar-menu-toggle,#src-sidebar{background-color:var(--sidebar-background-color);}.src .sidebar>*{visibility:hidden;}.src-sidebar-expanded .src .sidebar{overflow-y:auto;flex-basis:var(--src-sidebar-width);width:var(--src-sidebar-width);}.src-sidebar-expanded .src .sidebar>*{visibility:visible;}#all-types{margin-top:1em;}*{scrollbar-width:initial;scrollbar-color:var(--scrollbar-color);}.sidebar{scrollbar-width:thin;scrollbar-color:var(--scrollbar-color);}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;background-color:var(--scrollbar-track-background-color);}.sidebar::-webkit-scrollbar-track{background-color:var(--scrollbar-track-background-color);}::-webkit-scrollbar-thumb,.sidebar::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb-background-color);}.hidden{display:none !important;}.logo-container>img{height:48px;width:48px;}ul.block,.block li{padding:0;margin:0;list-style:none;}.sidebar-elems a,.sidebar>h2 a{display:block;padding:0.25rem;margin-left:-0.25rem;margin-right:0.25rem;}.sidebar h2{overflow-wrap:anywhere;padding:0;margin:0.7rem 0;}.sidebar h3{font-size:1.125rem;padding:0;margin:0;}.sidebar-elems,.sidebar>.version,.sidebar>h2{padding-left:24px;}.sidebar a{color:var(--sidebar-link-color);}.sidebar .current,.sidebar .current a,.sidebar-crate a.logo-container:hover+h2 a,.sidebar a:hover:not(.logo-container){background-color:var(--sidebar-current-link-background-color);}.sidebar-elems .block{margin-bottom:2em;}.sidebar-elems .block li a{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;}.sidebar-crate{display:flex;align-items:center;justify-content:center;margin:14px 32px 1rem;row-gap:10px;column-gap:32px;flex-wrap:wrap;}.sidebar-crate h2{flex-grow:1;margin:0 -8px;align-self:start;}.sidebar-crate .logo-container{margin:0 -16px 0 -16px;text-align:center;}.sidebar-crate h2 a{display:block;margin:0 calc(-24px + 0.25rem) 0 -0.2rem;padding:calc((16px - 0.57rem ) / 2 ) 0.25rem;padding-left:0.2rem;}.sidebar-crate h2 .version{display:block;font-weight:normal;font-size:1rem;overflow-wrap:break-word;}.sidebar-crate+.version{margin-top:-1rem;margin-bottom:1rem;}.mobile-topbar{display:none;}.rustdoc .example-wrap{display:flex;position:relative;margin-bottom:10px;}.rustdoc .example-wrap:last-child{margin-bottom:0px;}.rustdoc .example-wrap pre{margin:0;flex-grow:1;}.rustdoc:not(.src) .example-wrap pre{overflow:auto hidden;}.rustdoc .example-wrap pre.example-line-numbers,.rustdoc .example-wrap pre.src-line-numbers{flex-grow:0;min-width:fit-content;overflow:initial;text-align:right;-webkit-user-select:none;user-select:none;padding:14px 8px;color:var(--src-line-numbers-span-color);}.rustdoc .example-wrap pre.src-line-numbers{padding:14px 0;}.src-line-numbers a,.src-line-numbers span{color:var(--src-line-numbers-span-color);padding:0 8px;}.src-line-numbers :target{background-color:transparent;border-right:none;padding:0 8px;}.src-line-numbers .line-highlighted{background-color:var(--src-line-number-highlighted-background-color);}.search-loading{text-align:center;}.docblock-short{overflow-wrap:break-word;overflow-wrap:anywhere;}.docblock :not(pre)>code,.docblock-short code{white-space:pre-wrap;}.top-doc .docblock h2{font-size:1.375rem;}.top-doc .docblock h3{font-size:1.25rem;}.top-doc .docblock h4,.top-doc .docblock h5{font-size:1.125rem;}.top-doc .docblock h6{font-size:1rem;}.docblock h5{font-size:1rem;}.docblock h6{font-size:0.875rem;}.docblock{margin-left:24px;position:relative;}.docblock>:not(.more-examples-toggle):not(.example-wrap){max-width:100%;overflow-x:auto;}.out-of-band{flex-grow:0;font-size:1.125rem;}.docblock code,.docblock-short code,pre,.rustdoc.src .example-wrap{background-color:var(--code-block-background-color);}#main-content{position:relative;}.docblock table{margin:.5em 0;border-collapse:collapse;}.docblock table td,.docblock table th{padding:.5em;border:1px solid var(--border-color);}.docblock table tbody tr:nth-child(2n){background:var(--table-alt-row-background-color);}div.where{white-space:pre-wrap;font-size:0.875rem;}.item-info{display:block;margin-left:24px;}.item-info code{font-size:0.875rem;}#main-content>.item-info{margin-left:0;}nav.sub{flex-grow:1;flex-flow:row nowrap;margin:4px 0 25px 0;display:flex;align-items:center;}.search-form{position:relative;display:flex;height:34px;flex-grow:1;}.src nav.sub{margin:0 0 15px 0;}.section-header{display:block;position:relative;}.section-header:hover>.anchor,.impl:hover>.anchor,.trait-impl:hover>.anchor,.variant:hover>.anchor{display:initial;}.anchor{display:none;position:absolute;left:-0.5em;background:none !important;}.anchor.field{left:-5px;}.section-header>.anchor{left:-15px;padding-right:8px;}h2.section-header>.anchor{padding-right:6px;}a.doc-anchor{color:var(--main-color);display:none;position:absolute;left:-17px;padding-right:5px;padding-left:3px;}*:hover>.doc-anchor{display:block;}.top-doc>.docblock>*:first-child>.doc-anchor{display:none !important;}.main-heading a:hover,.example-wrap .rust a:hover,.all-items a:hover,.docblock a:not(.test-arrow):not(.scrape-help):not(.tooltip):hover:not(.doc-anchor),.docblock-short a:not(.test-arrow):not(.scrape-help):not(.tooltip):hover,.item-info a{text-decoration:underline;}.crate.block li.current a{font-weight:500;}table,.item-table{overflow-wrap:break-word;}.item-table{display:table;padding:0;margin:0;}.item-table>li{display:table-row;}.item-table>li>div{display:table-cell;}.item-table>li>.item-name{padding-right:1.25rem;}.search-results-title{margin-top:0;white-space:nowrap;display:flex;align-items:baseline;}#crate-search-div{position:relative;min-width:5em;}#crate-search{min-width:115px;padding:0 23px 0 4px;max-width:100%;text-overflow:ellipsis;border:1px solid var(--border-color);border-radius:4px;outline:none;cursor:pointer;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;background-color:var(--main-background-color);color:inherit;line-height:1.5;font-weight:500;}#crate-search:hover,#crate-search:focus{border-color:var(--crate-search-hover-border);}#crate-search-div::after{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0;content:"";background-repeat:no-repeat;background-size:20px;background-position:calc(100% - 2px) 56%;background-image:url('data:image/svg+xml, \ + ');filter:var(--crate-search-div-filter);}#crate-search-div:hover::after,#crate-search-div:focus-within::after{filter:var(--crate-search-div-hover-filter);}#crate-search>option{font-size:1rem;}.search-input{-webkit-appearance:none;outline:none;border:1px solid var(--border-color);border-radius:2px;padding:8px;font-size:1rem;flex-grow:1;background-color:var(--button-background-color);color:var(--search-color);}.search-input:focus{border-color:var(--search-input-focused-border-color);}.search-results{display:none;}.search-results.active{display:block;}.search-results>a{display:flex;margin-left:2px;margin-right:2px;border-bottom:1px solid var(--search-result-border-color);gap:1em;}.search-results>a>div.desc{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;flex:2;}.search-results a:hover,.search-results a:focus{background-color:var(--search-result-link-focus-background-color);}.search-results .result-name{display:flex;align-items:center;justify-content:start;flex:3;}.search-results .result-name .alias{color:var(--search-results-alias-color);}.search-results .result-name .grey{color:var(--search-results-grey-color);}.search-results .result-name .typename{color:var(--search-results-grey-color);font-size:0.875rem;width:var(--search-typename-width);}.search-results .result-name .path{word-break:break-all;max-width:calc(100% - var(--search-typename-width));display:inline-block;}.search-results .result-name .path>*{display:inline;}.popover{position:absolute;top:100%;right:0;z-index:calc(var(--desktop-sidebar-z-index) + 1);margin-top:7px;border-radius:3px;border:1px solid var(--border-color);background-color:var(--main-background-color);color:var(--main-color);--popover-arrow-offset:11px;}.popover::before{content:'';position:absolute;right:var(--popover-arrow-offset);border:solid var(--border-color);border-width:1px 1px 0 0;background-color:var(--main-background-color);padding:4px;transform:rotate(-45deg);top:-5px;}.setting-line{margin:1.2em 0.6em;}.setting-radio input,.setting-check input{margin-right:0.3em;height:1.2rem;width:1.2rem;border:2px solid var(--settings-input-border-color);outline:none;-webkit-appearance:none;cursor:pointer;}.setting-radio input{border-radius:50%;}.setting-radio span,.setting-check span{padding-bottom:1px;}.setting-radio{margin-top:0.1em;margin-bottom:0.1em;min-width:3.8em;padding:0.3em;display:inline-flex;align-items:center;cursor:pointer;}.setting-radio+.setting-radio{margin-left:0.5em;}.setting-check{margin-right:20px;display:flex;align-items:center;cursor:pointer;}.setting-radio input:checked{box-shadow:inset 0 0 0 3px var(--main-background-color);background-color:var(--settings-input-color);}.setting-check input:checked{background-color:var(--settings-input-color);border-width:1px;content:url('data:image/svg+xml,\ + \ + ');}.setting-radio input:focus,.setting-check input:focus{box-shadow:0 0 1px 1px var(--settings-input-color);}.setting-radio input:checked:focus{box-shadow:inset 0 0 0 3px var(--main-background-color),0 0 2px 2px var(--settings-input-color);}.setting-radio input:hover,.setting-check input:hover{border-color:var(--settings-input-color) !important;}#help.popover{max-width:600px;--popover-arrow-offset:48px;}#help dt{float:left;clear:left;margin-right:0.5rem;}#help span.top,#help span.bottom{text-align:center;display:block;font-size:1.125rem;}#help span.top{margin:10px 0;border-bottom:1px solid var(--border-color);padding-bottom:4px;margin-bottom:6px;}#help span.bottom{clear:both;border-top:1px solid var(--border-color);}.side-by-side>div{width:50%;float:left;padding:0 20px 20px 17px;}.item-info .stab{display:block;padding:3px;margin-bottom:5px;}.item-name .stab{margin-left:0.3125em;}.stab{padding:0 2px;font-size:0.875rem;font-weight:normal;color:var(--main-color);background-color:var(--stab-background-color);width:fit-content;white-space:pre-wrap;border-radius:3px;display:inline;vertical-align:baseline;}.stab.portability>code{background:none;color:var(--stab-code-color);}.stab .emoji,.item-info .stab::before{font-size:1.25rem;}.stab .emoji{margin-right:0.3rem;}.item-info .stab::before{content:"\0";width:0;display:inline-block;color:transparent;}.emoji{text-shadow:1px 0 0 black,-1px 0 0 black,0 1px 0 black,0 -1px 0 black;}.since{font-weight:normal;font-size:initial;}.rightside{padding-left:12px;float:right;}.rightside:not(a),.out-of-band{color:var(--right-side-color);}pre.rust{tab-size:4;-moz-tab-size:4;}pre.rust .kw{color:var(--code-highlight-kw-color);}pre.rust .kw-2{color:var(--code-highlight-kw-2-color);}pre.rust .lifetime{color:var(--code-highlight-lifetime-color);}pre.rust .prelude-ty{color:var(--code-highlight-prelude-color);}pre.rust .prelude-val{color:var(--code-highlight-prelude-val-color);}pre.rust .string{color:var(--code-highlight-string-color);}pre.rust .number{color:var(--code-highlight-number-color);}pre.rust .bool-val{color:var(--code-highlight-literal-color);}pre.rust .self{color:var(--code-highlight-self-color);}pre.rust .attr{color:var(--code-highlight-attribute-color);}pre.rust .macro,pre.rust .macro-nonterminal{color:var(--code-highlight-macro-color);}pre.rust .question-mark{font-weight:bold;color:var(--code-highlight-question-mark-color);}pre.rust .comment{color:var(--code-highlight-comment-color);}pre.rust .doccomment{color:var(--code-highlight-doc-comment-color);}.rustdoc.src .example-wrap pre.rust a{background:var(--codeblock-link-background);}.example-wrap.compile_fail,.example-wrap.should_panic{border-left:2px solid var(--codeblock-error-color);}.ignore.example-wrap{border-left:2px solid var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover,.example-wrap.should_panic:hover{border-left:2px solid var(--codeblock-error-hover-color);}.example-wrap.ignore:hover{border-left:2px solid var(--codeblock-ignore-hover-color);}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip{color:var(--codeblock-error-color);}.example-wrap.ignore .tooltip{color:var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover .tooltip,.example-wrap.should_panic:hover .tooltip{color:var(--codeblock-error-hover-color);}.example-wrap.ignore:hover .tooltip{color:var(--codeblock-ignore-hover-color);}.example-wrap .tooltip{position:absolute;display:block;left:-25px;top:5px;margin:0;line-height:1;}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip,.example-wrap.ignore .tooltip{font-weight:bold;font-size:1.25rem;}.content .docblock .warning{border-left:2px solid var(--warning-border-color);padding:14px;position:relative;overflow-x:visible !important;}.content .docblock .warning::before{color:var(--warning-border-color);content:"ⓘ";position:absolute;left:-25px;top:5px;font-weight:bold;font-size:1.25rem;}.top-doc>.docblock>.warning:first-child::before{top:20px;}a.test-arrow{visibility:hidden;position:absolute;padding:5px 10px 5px 10px;border-radius:5px;font-size:1.375rem;top:5px;right:5px;z-index:1;color:var(--test-arrow-color);background-color:var(--test-arrow-background-color);}a.test-arrow:hover{color:var(--test-arrow-hover-color);background-color:var(--test-arrow-hover-background-color);}.example-wrap:hover .test-arrow{visibility:visible;}.code-attribute{font-weight:300;color:var(--code-attribute-color);}.item-spacer{width:100%;height:12px;display:block;}.out-of-band>span.since{font-size:1.25rem;}.sub-variant h4{font-size:1rem;font-weight:400;margin-top:0;margin-bottom:0;}.sub-variant{margin-left:24px;margin-bottom:40px;}.sub-variant>.sub-variant-field{margin-left:24px;}:target{padding-right:3px;background-color:var(--target-background-color);border-right:3px solid var(--target-border-color);}.code-header a.tooltip{color:inherit;margin-right:15px;position:relative;}.code-header a.tooltip:hover{color:var(--link-color);}a.tooltip:hover::after{position:absolute;top:calc(100% - 10px);left:-15px;right:-15px;height:20px;content:"\00a0";}.fade-out{opacity:0;transition:opacity 0.45s cubic-bezier(0,0,0.1,1.0);}.popover.tooltip .content{margin:0.25em 0.5em;}.popover.tooltip .content pre,.popover.tooltip .content code{background:transparent;margin:0;padding:0;font-size:1.25rem;white-space:pre-wrap;}.popover.tooltip .content>h3:first-child{margin:0 0 5px 0;}.search-failed{text-align:center;margin-top:20px;display:none;}.search-failed.active{display:block;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#search-tabs{display:flex;flex-direction:row;gap:1px;margin-bottom:4px;}#search-tabs button{text-align:center;font-size:1.125rem;border:0;border-top:2px solid;flex:1;line-height:1.5;color:inherit;}#search-tabs button:not(.selected){background-color:var(--search-tab-button-not-selected-background);border-top-color:var(--search-tab-button-not-selected-border-top-color);}#search-tabs button:hover,#search-tabs button.selected{background-color:var(--search-tab-button-selected-background);border-top-color:var(--search-tab-button-selected-border-top-color);}#search-tabs .count{font-size:1rem;font-variant-numeric:tabular-nums;color:var(--search-tab-title-count-color);}#search .error code{border-radius:3px;background-color:var(--search-error-code-background-color);}.search-corrections{font-weight:normal;}#src-sidebar{width:100%;overflow:auto;}#src-sidebar div.files>a:hover,details.dir-entry summary:hover,#src-sidebar div.files>a:focus,details.dir-entry summary:focus{background-color:var(--src-sidebar-background-hover);}#src-sidebar div.files>a.selected{background-color:var(--src-sidebar-background-selected);}.src-sidebar-title{position:sticky;top:0;display:flex;padding:8px 8px 0 48px;margin-bottom:7px;background:var(--sidebar-background-color);border-bottom:1px solid var(--border-color);}#settings-menu,#help-button{margin-left:4px;display:flex;}#sidebar-button{display:none;line-height:0;}.hide-sidebar #sidebar-button,.src #sidebar-button{display:flex;margin-right:4px;position:fixed;left:6px;height:34px;width:34px;background-color:var(--main-background-color);z-index:1;}.src #sidebar-button{left:8px;z-index:calc(var(--desktop-sidebar-z-index) + 1);}.hide-sidebar .src #sidebar-button{position:static;}#settings-menu>a,#help-button>a,#sidebar-button>a{display:flex;align-items:center;justify-content:center;background-color:var(--button-background-color);border:1px solid var(--border-color);border-radius:2px;color:var(--settings-button-color);font-size:20px;width:33px;}#settings-menu>a:hover,#settings-menu>a:focus,#help-button>a:hover,#help-button>a:focus,#sidebar-button>a:hover,#sidebar-button>a:focus{border-color:var(--settings-button-border-focus);}#sidebar-button>a:before{content:url('data:image/svg+xml,\ + \ + \ + ');width:22px;height:22px;}#copy-path{color:var(--copy-path-button-color);background:var(--main-background-color);height:34px;margin-left:10px;padding:0;padding-left:2px;border:0;width:33px;}#copy-path>img{filter:var(--copy-path-img-filter);}#copy-path:hover>img{filter:var(--copy-path-img-hover-filter);}@keyframes rotating{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}#settings-menu.rotate>a img{animation:rotating 2s linear infinite;}kbd{display:inline-block;padding:3px 5px;font:15px monospace;line-height:10px;vertical-align:middle;border:solid 1px var(--border-color);border-radius:3px;color:var(--kbd-color);background-color:var(--kbd-background);box-shadow:inset 0 -1px 0 var(--kbd-box-shadow-color);}ul.all-items>li{list-style:none;}details.dir-entry{padding-left:4px;}details.dir-entry>summary{margin:0 0 0 -4px;padding:0 0 0 4px;cursor:pointer;}details.dir-entry div.folders,details.dir-entry div.files{padding-left:23px;}details.dir-entry a{display:block;}details.toggle{contain:layout;position:relative;}details.toggle>summary.hideme{cursor:pointer;font-size:1rem;}details.toggle>summary{list-style:none;outline:none;}details.toggle>summary::-webkit-details-marker,details.toggle>summary::marker{display:none;}details.toggle>summary.hideme>span{margin-left:9px;}details.toggle>summary::before{background:url('data:image/svg+xml,') no-repeat top left;content:"";cursor:pointer;width:16px;height:16px;display:inline-block;vertical-align:middle;opacity:.5;filter:var(--toggle-filter);}details.toggle>summary.hideme>span,.more-examples-toggle summary,.more-examples-toggle .hide-more{color:var(--toggles-color);}details.toggle>summary::after{content:"Expand";overflow:hidden;width:0;height:0;position:absolute;}details.toggle>summary.hideme::after{content:"";}details.toggle>summary:focus::before,details.toggle>summary:hover::before{opacity:1;}details.toggle>summary:focus-visible::before{outline:1px dotted #000;outline-offset:1px;}details.non-exhaustive{margin-bottom:8px;}details.toggle>summary.hideme::before{position:relative;}details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;top:4px;}.impl-items>details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;}details.toggle[open] >summary.hideme{position:absolute;}details.toggle[open] >summary.hideme>span{display:none;}details.toggle[open] >summary::before{background:url('data:image/svg+xml,') no-repeat top left;}details.toggle[open] >summary::after{content:"Collapse";}.docblock summary>*{display:inline-block;}.docblock>.example-wrap:first-child .tooltip{margin-top:16px;}.src #sidebar-button>a:before,.sidebar-menu-toggle:before{content:url('data:image/svg+xml,\ + ');opacity:0.75;}.sidebar-menu-toggle:hover:before,.sidebar-menu-toggle:active:before,.sidebar-menu-toggle:focus:before{opacity:1;}.src #sidebar-button>a:before{content:url('data:image/svg+xml,\ + \ + \ + ');opacity:0.75;}@media (max-width:850px){#search-tabs .count{display:block;}}@media (max-width:700px){*[id]{scroll-margin-top:45px;}.rustdoc{display:block;}main{padding-left:15px;padding-top:0px;}.main-heading{flex-direction:column;}.out-of-band{text-align:left;margin-left:initial;padding:initial;}.out-of-band .since::before{content:"Since ";}.sidebar .logo-container,.sidebar .location,.sidebar-resizer{display:none;}.sidebar{position:fixed;top:45px;left:-1000px;z-index:11;height:calc(100vh - 45px);width:200px;}.src main,.rustdoc.src .sidebar{top:0;padding:0;height:100vh;border:0;}.src .search-form{margin-left:40px;}.hide-sidebar .search-form{margin-left:32px;}.hide-sidebar .src .search-form{margin-left:0;}.sidebar.shown,.src-sidebar-expanded .src .sidebar,.rustdoc:not(.src) .sidebar:focus-within{left:0;}.mobile-topbar h2{padding-bottom:0;margin:auto 0.5em auto auto;overflow:hidden;font-size:24px;}.mobile-topbar h2 a{display:block;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;}.mobile-topbar .logo-container>img{max-width:35px;max-height:35px;margin:5px 0 5px 20px;}.mobile-topbar{display:flex;flex-direction:row;position:sticky;z-index:10;font-size:2rem;height:45px;width:100%;left:0;top:0;}.hide-sidebar .mobile-topbar{display:none;}.sidebar-menu-toggle{width:45px;border:none;line-height:0;}.hide-sidebar .sidebar-menu-toggle{display:none;}.sidebar-elems{margin-top:1em;}.anchor{display:none !important;}#main-content>details.toggle>summary::before,#main-content>div>details.toggle>summary::before{left:-11px;}#copy-path,#help-button{display:none;}#sidebar-button>a:before{content:url('data:image/svg+xml,\ + \ + \ + ');width:22px;height:22px;}.sidebar-menu-toggle:before{filter:var(--mobile-sidebar-menu-filter);}.sidebar-menu-toggle:hover{background:var(--main-background-color);}.item-table,.item-row,.item-table>li,.item-table>li>div,.search-results>a,.search-results>a>div{display:block;}.search-results>a{padding:5px 0px;}.search-results>a>div.desc,.item-table>li>div.desc{padding-left:2em;}.search-results .result-name{display:block;}.search-results .result-name .typename{width:initial;margin-right:0;}.search-results .result-name .typename,.search-results .result-name .path{display:inline;}.src-sidebar-expanded .src .sidebar{position:fixed;max-width:100vw;width:100vw;}.src .src-sidebar-title{padding-top:0;}details.toggle:not(.top-doc)>summary{margin-left:10px;}.impl-items>details.toggle>summary:not(.hideme)::before,#main-content>details.toggle:not(.top-doc)>summary::before,#main-content>div>details.toggle>summary::before{left:-11px;}.impl-items>.item-info{margin-left:34px;}.src nav.sub{margin:0;padding:var(--nav-sub-mobile-padding);}}@media (min-width:701px){.scraped-example-title{position:absolute;z-index:10;background:var(--main-background-color);bottom:8px;right:5px;padding:2px 4px;box-shadow:0 0 4px var(--main-background-color);}}@media print{nav.sidebar,nav.sub,.out-of-band,a.src,#copy-path,details.toggle[open] >summary::before,details.toggle>summary::before,details.toggle.top-doc>summary{display:none;}.docblock{margin-left:0;}main{padding:10px;}}@media (max-width:464px){.docblock{margin-left:12px;}.docblock code{overflow-wrap:break-word;overflow-wrap:anywhere;}nav.sub{flex-direction:column;}.search-form{align-self:stretch;}}.variant,.implementors-toggle>summary,.impl,#implementors-list>.docblock,.impl-items>section,.impl-items>.toggle>summary,.methods>section,.methods>.toggle>summary{margin-bottom:0.75em;}.variants>.docblock,.implementors-toggle>.docblock,.impl-items>.toggle[open]:not(:last-child),.methods>.toggle[open]:not(:last-child),.implementors-toggle[open]:not(:last-child){margin-bottom:2em;}#trait-implementations-list .impl-items>.toggle:not(:last-child),#synthetic-implementations-list .impl-items>.toggle:not(:last-child),#blanket-implementations-list .impl-items>.toggle:not(:last-child){margin-bottom:1em;}.scraped-example-list .scrape-help{margin-left:10px;padding:0 4px;font-weight:normal;font-size:12px;position:relative;bottom:1px;border:1px solid var(--scrape-example-help-border-color);border-radius:50px;color:var(--scrape-example-help-color);}.scraped-example-list .scrape-help:hover{border-color:var(--scrape-example-help-hover-border-color);color:var(--scrape-example-help-hover-color);}.scraped-example{position:relative;}.scraped-example .code-wrapper{position:relative;display:flex;flex-direction:row;flex-wrap:wrap;width:100%;}.scraped-example:not(.expanded) .code-wrapper{max-height:calc(1.5em * 5 + 10px);}.scraped-example:not(.expanded) .code-wrapper pre{overflow-y:hidden;padding-bottom:0;max-height:calc(1.5em * 5 + 10px);}.more-scraped-examples .scraped-example:not(.expanded) .code-wrapper,.more-scraped-examples .scraped-example:not(.expanded) .code-wrapper pre{max-height:calc(1.5em * 10 + 10px);}.scraped-example .code-wrapper .next,.scraped-example .code-wrapper .prev,.scraped-example .code-wrapper .expand{color:var(--main-color);position:absolute;top:0.25em;z-index:1;padding:0;background:none;border:none;-webkit-appearance:none;opacity:1;}.scraped-example .code-wrapper .prev{right:2.25em;}.scraped-example .code-wrapper .next{right:1.25em;}.scraped-example .code-wrapper .expand{right:0.25em;}.scraped-example:not(.expanded) .code-wrapper::before,.scraped-example:not(.expanded) .code-wrapper::after{content:" ";width:100%;height:5px;position:absolute;z-index:1;}.scraped-example:not(.expanded) .code-wrapper::before{top:0;background:linear-gradient(to bottom,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example:not(.expanded) .code-wrapper::after{bottom:0;background:linear-gradient(to top,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example .code-wrapper .example-wrap{width:100%;overflow-y:hidden;margin-bottom:0;}.scraped-example:not(.expanded) .code-wrapper .example-wrap{overflow-x:hidden;}.scraped-example .example-wrap .rust span.highlight{background:var(--scrape-example-code-line-highlight);}.scraped-example .example-wrap .rust span.highlight.focus{background:var(--scrape-example-code-line-highlight-focus);}.more-examples-toggle{max-width:calc(100% + 25px);margin-top:10px;margin-left:-25px;}.more-examples-toggle .hide-more{margin-left:25px;cursor:pointer;}.more-scraped-examples{margin-left:25px;position:relative;}.toggle-line{position:absolute;top:5px;bottom:0;right:calc(100% + 10px);padding:0 4px;cursor:pointer;}.toggle-line-inner{min-width:2px;height:100%;background:var(--scrape-example-toggle-line-background);}.toggle-line:hover .toggle-line-inner{background:var(--scrape-example-toggle-line-hover-background);}.more-scraped-examples .scraped-example,.example-links{margin-top:20px;}.more-scraped-examples .scraped-example:first-child{margin-top:5px;}.example-links ul{margin-bottom:0;}:root[data-theme="light"]{--main-background-color:white;--main-color:black;--settings-input-color:#2196f3;--settings-input-border-color:#717171;--settings-button-color:#000;--settings-button-border-focus:#717171;--sidebar-background-color:#f5f5f5;--sidebar-background-color-hover:#e0e0e0;--code-block-background-color:#f5f5f5;--scrollbar-track-background-color:#dcdcdc;--scrollbar-thumb-background-color:rgba(36,37,39,0.6);--scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;--headings-border-bottom-color:#ddd;--border-color:#e0e0e0;--button-background-color:#fff;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:none;--mobile-sidebar-menu-filter:none;--search-input-focused-border-color:#66afe9;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(35%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ad378a;--trait-link-color:#6e4fc9;--assoc-item-link-color:#3873ad;--function-link-color:#ad7c37;--macro-link-color:#068000;--keyword-link-color:#3873ad;--mod-link-color:#3873ad;--link-color:#3873ad;--sidebar-link-color:#356da4;--sidebar-current-link-background-color:#fff;--search-result-link-focus-background-color:#ccc;--search-result-border-color:#aaa3;--search-color:#000;--search-error-code-background-color:#d0cccc;--search-results-alias-color:#000;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#e6e6e6;--search-tab-button-not-selected-background:#e6e6e6;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#fff;--stab-background-color:#fff5d6;--stab-code-color:#000;--code-highlight-kw-color:#8959a8;--code-highlight-kw-2-color:#4271ae;--code-highlight-lifetime-color:#b76514;--code-highlight-prelude-color:#4271ae;--code-highlight-prelude-val-color:#c82829;--code-highlight-number-color:#718c00;--code-highlight-string-color:#718c00;--code-highlight-literal-color:#c82829;--code-highlight-attribute-color:#c82829;--code-highlight-self-color:#c82829;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8e908c;--code-highlight-doc-comment-color:#4d4d4c;--src-line-numbers-span-color:#c67e2d;--src-line-number-highlighted-background-color:#fdffd3;--test-arrow-color:#f5f5f5;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#f5f5f5;--test-arrow-hover-background-color:rgb(78,139,202);--target-background-color:#fdffd3;--target-border-color:#ad7c37;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:initial;--crate-search-div-filter:invert(100%) sepia(0%) saturate(4223%) hue-rotate(289deg) brightness(114%) contrast(76%);--crate-search-div-hover-filter:invert(44%) sepia(18%) saturate(23%) hue-rotate(317deg) brightness(96%) contrast(93%);--crate-search-hover-border:#717171;--src-sidebar-background-selected:#fff;--src-sidebar-background-hover:#e0e0e0;--table-alt-row-background-color:#f5f5f5;--codeblock-link-background:#eee;--scrape-example-toggle-line-background:#ccc;--scrape-example-toggle-line-hover-background:#999;--scrape-example-code-line-highlight:#fcffd6;--scrape-example-code-line-highlight-focus:#f6fdb0;--scrape-example-help-border-color:#555;--scrape-example-help-color:#333;--scrape-example-help-hover-border-color:#000;--scrape-example-help-hover-color:#000;--scrape-example-code-wrapper-background-start:rgba(255,255,255,1);--scrape-example-code-wrapper-background-end:rgba(255,255,255,0);--sidebar-resizer-hover:hsl(207,90%,66%);--sidebar-resizer-active:hsl(207,90%,54%);}:root[data-theme="dark"]{--main-background-color:#353535;--main-color:#ddd;--settings-input-color:#2196f3;--settings-input-border-color:#999;--settings-button-color:#000;--settings-button-border-focus:#ffb900;--sidebar-background-color:#505050;--sidebar-background-color-hover:#676767;--code-block-background-color:#2A2A2A;--scrollbar-track-background-color:#717171;--scrollbar-thumb-background-color:rgba(32,34,37,.6);--scrollbar-color:rgba(32,34,37,.6) #5a5a5a;--headings-border-bottom-color:#d2d2d2;--border-color:#e0e0e0;--button-background-color:#f0f0f0;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--mobile-sidebar-menu-filter:invert(100%);--search-input-focused-border-color:#008dfd;--copy-path-button-color:#999;--copy-path-img-filter:invert(50%);--copy-path-img-hover-filter:invert(65%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#2dbfb8;--trait-link-color:#b78cf2;--assoc-item-link-color:#d2991d;--function-link-color:#2bab63;--macro-link-color:#09bd00;--keyword-link-color:#d2991d;--mod-link-color:#d2991d;--link-color:#d2991d;--sidebar-link-color:#fdbf35;--sidebar-current-link-background-color:#444;--search-result-link-focus-background-color:#616161;--search-result-border-color:#aaa3;--search-color:#111;--search-error-code-background-color:#484848;--search-results-alias-color:#fff;--search-results-grey-color:#ccc;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:#252525;--search-tab-button-not-selected-background:#252525;--search-tab-button-selected-border-top-color:#0089ff;--search-tab-button-selected-background:#353535;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ab8ac1;--code-highlight-kw-2-color:#769acb;--code-highlight-lifetime-color:#d97f26;--code-highlight-prelude-color:#769acb;--code-highlight-prelude-val-color:#ee6868;--code-highlight-number-color:#83a300;--code-highlight-string-color:#83a300;--code-highlight-literal-color:#ee6868;--code-highlight-attribute-color:#ee6868;--code-highlight-self-color:#ee6868;--code-highlight-macro-color:#3e999f;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#8d8d8b;--code-highlight-doc-comment-color:#8ca375;--src-line-numbers-span-color:#3b91e2;--src-line-number-highlighted-background-color:#0a042f;--test-arrow-color:#dedede;--test-arrow-background-color:rgba(78,139,202,0.2);--test-arrow-hover-color:#dedede;--test-arrow-hover-background-color:#4e8bca;--target-background-color:#494a3d;--target-border-color:#bb7410;--kbd-color:#000;--kbd-background:#fafbfc;--kbd-box-shadow-color:#c6cbd1;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(94%) sepia(0%) saturate(721%) hue-rotate(255deg) brightness(90%) contrast(90%);--crate-search-div-hover-filter:invert(69%) sepia(60%) saturate(6613%) hue-rotate(184deg) brightness(100%) contrast(91%);--crate-search-hover-border:#2196f3;--src-sidebar-background-selected:#333;--src-sidebar-background-hover:#444;--table-alt-row-background-color:#2a2a2a;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(53,53,53,1);--scrape-example-code-wrapper-background-end:rgba(53,53,53,0);--sidebar-resizer-hover:hsl(207,30%,54%);--sidebar-resizer-active:hsl(207,90%,54%);}:root[data-theme="ayu"]{--main-background-color:#0f1419;--main-color:#c5c5c5;--settings-input-color:#ffb454;--settings-input-border-color:#999;--settings-button-color:#fff;--settings-button-border-focus:#e0e0e0;--sidebar-background-color:#14191f;--sidebar-background-color-hover:rgba(70,70,70,0.33);--code-block-background-color:#191f26;--scrollbar-track-background-color:transparent;--scrollbar-thumb-background-color:#5c6773;--scrollbar-color:#5c6773 #24292f;--headings-border-bottom-color:#5c6773;--border-color:#5c6773;--button-background-color:#141920;--right-side-color:grey;--code-attribute-color:#999;--toggles-color:#999;--toggle-filter:invert(100%);--mobile-sidebar-menu-filter:invert(100%);--search-input-focused-border-color:#5c6773;--copy-path-button-color:#fff;--copy-path-img-filter:invert(70%);--copy-path-img-hover-filter:invert(100%);--codeblock-error-hover-color:rgb(255,0,0);--codeblock-error-color:rgba(255,0,0,.5);--codeblock-ignore-hover-color:rgb(255,142,0);--codeblock-ignore-color:rgba(255,142,0,.6);--warning-border-color:#ff8e00;--type-link-color:#ffa0a5;--trait-link-color:#39afd7;--assoc-item-link-color:#39afd7;--function-link-color:#fdd687;--macro-link-color:#a37acc;--keyword-link-color:#39afd7;--mod-link-color:#39afd7;--link-color:#39afd7;--sidebar-link-color:#53b1db;--sidebar-current-link-background-color:transparent;--search-result-link-focus-background-color:#3c3c3c;--search-result-border-color:#aaa3;--search-color:#fff;--search-error-code-background-color:#4f4c4c;--search-results-alias-color:#c5c5c5;--search-results-grey-color:#999;--search-tab-title-count-color:#888;--search-tab-button-not-selected-border-top-color:none;--search-tab-button-not-selected-background:transparent !important;--search-tab-button-selected-border-top-color:none;--search-tab-button-selected-background:#141920 !important;--stab-background-color:#314559;--stab-code-color:#e6e1cf;--code-highlight-kw-color:#ff7733;--code-highlight-kw-2-color:#ff7733;--code-highlight-lifetime-color:#ff7733;--code-highlight-prelude-color:#69f2df;--code-highlight-prelude-val-color:#ff7733;--code-highlight-number-color:#b8cc52;--code-highlight-string-color:#b8cc52;--code-highlight-literal-color:#ff7733;--code-highlight-attribute-color:#e6e1cf;--code-highlight-self-color:#36a3d9;--code-highlight-macro-color:#a37acc;--code-highlight-question-mark-color:#ff9011;--code-highlight-comment-color:#788797;--code-highlight-doc-comment-color:#a1ac88;--src-line-numbers-span-color:#5c6773;--src-line-number-highlighted-background-color:rgba(255,236,164,0.06);--test-arrow-color:#788797;--test-arrow-background-color:rgba(57,175,215,0.09);--test-arrow-hover-color:#c5c5c5;--test-arrow-hover-background-color:rgba(57,175,215,0.368);--target-background-color:rgba(255,236,164,0.06);--target-border-color:rgba(255,180,76,0.85);--kbd-color:#c5c5c5;--kbd-background:#314559;--kbd-box-shadow-color:#5c6773;--rust-logo-filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);--crate-search-div-filter:invert(41%) sepia(12%) saturate(487%) hue-rotate(171deg) brightness(94%) contrast(94%);--crate-search-div-hover-filter:invert(98%) sepia(12%) saturate(81%) hue-rotate(343deg) brightness(113%) contrast(76%);--crate-search-hover-border:#e0e0e0;--src-sidebar-background-selected:#14191f;--src-sidebar-background-hover:#14191f;--table-alt-row-background-color:#191f26;--codeblock-link-background:#333;--scrape-example-toggle-line-background:#999;--scrape-example-toggle-line-hover-background:#c5c5c5;--scrape-example-code-line-highlight:#5b3b01;--scrape-example-code-line-highlight-focus:#7c4b0f;--scrape-example-help-border-color:#aaa;--scrape-example-help-color:#eee;--scrape-example-help-hover-border-color:#fff;--scrape-example-help-hover-color:#fff;--scrape-example-code-wrapper-background-start:rgba(15,20,25,1);--scrape-example-code-wrapper-background-end:rgba(15,20,25,0);--sidebar-resizer-hover:hsl(34,50%,33%);--sidebar-resizer-active:hsl(34,100%,66%);}:root[data-theme="ayu"] h1,:root[data-theme="ayu"] h2,:root[data-theme="ayu"] h3,:root[data-theme="ayu"] h4,:where(:root[data-theme="ayu"]) h1 a,:root[data-theme="ayu"] .sidebar h2 a,:root[data-theme="ayu"] .sidebar h3 a{color:#fff;}:root[data-theme="ayu"] .docblock code{color:#ffb454;}:root[data-theme="ayu"] .docblock a>code{color:#39AFD7 !important;}:root[data-theme="ayu"] .code-header,:root[data-theme="ayu"] .docblock pre>code,:root[data-theme="ayu"] pre,:root[data-theme="ayu"] pre>code,:root[data-theme="ayu"] .item-info code,:root[data-theme="ayu"] .rustdoc.source .example-wrap{color:#e6e1cf;}:root[data-theme="ayu"] .sidebar .current,:root[data-theme="ayu"] .sidebar .current a,:root[data-theme="ayu"] .sidebar a:hover,:root[data-theme="ayu"] #src-sidebar div.files>a:hover,:root[data-theme="ayu"] details.dir-entry summary:hover,:root[data-theme="ayu"] #src-sidebar div.files>a:focus,:root[data-theme="ayu"] details.dir-entry summary:focus,:root[data-theme="ayu"] #src-sidebar div.files>a.selected{color:#ffb44c;}:root[data-theme="ayu"] .sidebar-elems .location{color:#ff7733;}:root[data-theme="ayu"] .src-line-numbers .line-highlighted{color:#708090;padding-right:7px;border-right:1px solid #ffb44c;}:root[data-theme="ayu"] .search-results a:hover,:root[data-theme="ayu"] .search-results a:focus{color:#fff !important;background-color:#3c3c3c;}:root[data-theme="ayu"] .search-results a{color:#0096cf;}:root[data-theme="ayu"] .search-results a div.desc{color:#c5c5c5;}:root[data-theme="ayu"] .result-name .primitive>i,:root[data-theme="ayu"] .result-name .keyword>i{color:#788797;}:root[data-theme="ayu"] #search-tabs>button.selected{border-bottom:1px solid #ffb44c !important;border-top:none;}:root[data-theme="ayu"] #search-tabs>button:not(.selected){border:none;background-color:transparent !important;}:root[data-theme="ayu"] #search-tabs>button:hover{border-bottom:1px solid rgba(242,151,24,0.3);}:root[data-theme="ayu"] #settings-menu>a img,:root[data-theme="ayu"] #sidebar-button>a:before{filter:invert(100);} \ No newline at end of file diff --git a/static.files/rustdoc-9bb858ba049f1f21.css b/static.files/rustdoc-9bb858ba049f1f21.css deleted file mode 100644 index 73eacd80..00000000 --- a/static.files/rustdoc-9bb858ba049f1f21.css +++ /dev/null @@ -1,8 +0,0 @@ - :root{--nav-sub-mobile-padding:8px;--search-typename-width:6.75rem;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular-018c141bf0843ffd.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium-8f9a781e4970d388.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:400;src:local('Source Serif 4'),url("SourceSerif4-Regular-46f98efaafac5295.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:italic;font-weight:400;src:local('Source Serif 4 Italic'),url("SourceSerif4-It-acdfaf1a8af734b1.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:700;src:local('Source Serif 4 Bold'),url("SourceSerif4-Bold-a2c9cd1067f8b328.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It-1cc31594bf4f1f79.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2") format("woff2");font-display:swap;}@font-face {font-family:'NanumBarunGothic';src:url("NanumBarunGothic-0f09457c7a19b7c6.ttf.woff2") format("woff2");font-display:swap;unicode-range:U+AC00-D7AF,U+1100-11FF,U+3130-318F,U+A960-A97F,U+D7B0-D7FF;}*{box-sizing:border-box;}body{font:1rem/1.5 "Source Serif 4",NanumBarunGothic,serif;margin:0;position:relative;overflow-wrap:break-word;overflow-wrap:anywhere;font-feature-settings:"kern","liga";background-color:var(--main-background-color);color:var(--main-color);}h1{font-size:1.5rem;}h2{font-size:1.375rem;}h3{font-size:1.25rem;}h1,h2,h3,h4,h5,h6{font-weight:500;}h1,h2,h3,h4{margin:25px 0 15px 0;padding-bottom:6px;}.docblock h3,.docblock h4,h5,h6{margin:15px 0 5px 0;}.docblock>h2:first-child,.docblock>h3:first-child,.docblock>h4:first-child,.docblock>h5:first-child,.docblock>h6:first-child{margin-top:0;}.main-heading h1{margin:0;padding:0;flex-grow:1;overflow-wrap:break-word;overflow-wrap:anywhere;}.main-heading{display:flex;flex-wrap:wrap;padding-bottom:6px;margin-bottom:15px;}.content h2,.top-doc .docblock>h3,.top-doc .docblock>h4{border-bottom:1px solid var(--headings-border-bottom-color);}h1,h2{line-height:1.25;padding-top:3px;padding-bottom:9px;}h3.code-header{font-size:1.125rem;}h4.code-header{font-size:1rem;}.code-header{font-weight:600;margin:0;padding:0;white-space:pre-wrap;}#crate-search,h1,h2,h3,h4,h5,h6,.sidebar,.mobile-topbar,.search-input,.search-results .result-name,.item-name>a,.out-of-band,span.since,a.srclink,#help-button>a,summary.hideme,.scraped-example-list,ul.all-items{font-family:"Fira Sans",Arial,NanumBarunGothic,sans-serif;}#toggle-all-docs,a.anchor,.small-section-header a,#source-sidebar a,.rust a,.sidebar h2 a,.sidebar h3 a,.mobile-topbar h2 a,h1 a,.search-results a,.stab,.result-name i{color:var(--main-color);}span.enum,a.enum,span.struct,a.struct,span.union,a.union,span.primitive,a.primitive,span.type,a.type,span.foreigntype,a.foreigntype{color:var(--type-link-color);}span.trait,a.trait,span.traitalias,a.traitalias{color:var(--trait-link-color);}span.associatedtype,a.associatedtype,span.constant,a.constant,span.static,a.static{color:var(--assoc-item-link-color);}span.fn,a.fn,span.method,a.method,span.tymethod,a.tymethod{color:var(--function-link-color);}span.attr,a.attr,span.derive,a.derive,span.macro,a.macro{color:var(--macro-link-color);}span.mod,a.mod{color:var(--mod-link-color);}span.keyword,a.keyword{color:var(--keyword-link-color);}a{color:var(--link-color);text-decoration:none;}ol,ul{padding-left:24px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.625em;}p{margin:0 0 .75em 0;}p:last-child{margin:0;}button{padding:1px 6px;cursor:pointer;}button#toggle-all-docs{padding:0;background:none;border:none;-webkit-appearance:none;opacity:1;}.rustdoc{display:flex;flex-direction:row;flex-wrap:nowrap;}main{position:relative;flex-grow:1;padding:10px 15px 40px 45px;min-width:0;}.source main{padding:15px;}.width-limiter{max-width:960px;margin-right:auto;}details:not(.toggle) summary{margin-bottom:.6em;}code,pre,a.test-arrow,.code-header{font-family:"Source Code Pro",monospace;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.125em;}.docblock pre code,.docblock-short pre code{padding:0;}pre{padding:14px;line-height:1.5;}pre.item-decl{overflow-x:auto;}.item-decl .type-contents-toggle{contain:initial;}.source .content pre{padding:20px;}.rustdoc.source .example-wrap pre.src-line-numbers{padding:20px 0 20px 4px;}img{max-width:100%;}.sub-logo-container,.logo-container{line-height:0;display:block;}.sub-logo-container{margin-right:32px;}.sub-logo-container>img{height:60px;width:60px;object-fit:contain;}.rust-logo{filter:var(--rust-logo-filter);}.sidebar{font-size:0.875rem;flex:0 0 200px;overflow-y:scroll;overscroll-behavior:contain;position:sticky;height:100vh;top:0;left:0;}.rustdoc.source .sidebar{flex-basis:50px;border-right:1px solid;overflow-x:hidden;overflow-y:hidden;z-index:1;}.sidebar,.mobile-topbar,.sidebar-menu-toggle,#src-sidebar-toggle,#source-sidebar{background-color:var(--sidebar-background-color);}#src-sidebar-toggle>button:hover,#src-sidebar-toggle>button:focus{background-color:var(--sidebar-background-color-hover);}.source .sidebar>*:not(#src-sidebar-toggle){visibility:hidden;}.source-sidebar-expanded .source .sidebar{overflow-y:auto;flex-basis:300px;}.source-sidebar-expanded .source .sidebar>*:not(#src-sidebar-toggle){visibility:visible;}#all-types{margin-top:1em;}*{scrollbar-width:initial;scrollbar-color:var(--scrollbar-color);}.sidebar{scrollbar-width:thin;scrollbar-color:var(--scrollbar-color);}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;background-color:var(--scrollbar-track-background-color);}.sidebar::-webkit-scrollbar-track{background-color:var(--scrollbar-track-background-color);}::-webkit-scrollbar-thumb,.sidebar::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb-background-color);}.hidden{display:none !important;}.sidebar .logo-container{margin-top:10px;margin-bottom:10px;text-align:center;}.version{overflow-wrap:break-word;}.logo-container>img{height:100px;width:100px;}ul.block,.block li{padding:0;margin:0;list-style:none;}.sidebar-elems a,.sidebar>h2 a{display:block;padding:0.25rem;margin-left:-0.25rem;}.sidebar h2{overflow-wrap:anywhere;padding:0;margin:0.7rem 0;}.sidebar h3{font-size:1.125rem;padding:0;margin:0;}.sidebar-elems,.sidebar>h2{padding-left:24px;}.sidebar a{color:var(--sidebar-link-color);}.sidebar .current,.sidebar a:hover:not(.logo-container){background-color:var(--sidebar-current-link-background-color);}.sidebar-elems .block{margin-bottom:2em;}.sidebar-elems .block li a{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;}.mobile-topbar{display:none;}.rustdoc .example-wrap{display:flex;position:relative;margin-bottom:10px;}.rustdoc .example-wrap:last-child{margin-bottom:0px;}.rustdoc .example-wrap pre{margin:0;flex-grow:1;}.rustdoc:not(.source) .example-wrap pre{overflow:auto hidden;}.rustdoc .example-wrap pre.example-line-numbers,.rustdoc .example-wrap pre.src-line-numbers{flex-grow:0;min-width:fit-content;overflow:initial;text-align:right;-webkit-user-select:none;user-select:none;padding:14px 8px;color:var(--src-line-numbers-span-color);}.rustdoc .example-wrap pre.src-line-numbers{padding:14px 0;}.src-line-numbers a,.src-line-numbers span{color:var(--src-line-numbers-span-color);padding:0 8px;}.src-line-numbers :target{background-color:transparent;border-right:none;padding:0 8px;}.src-line-numbers .line-highlighted{background-color:var(--src-line-number-highlighted-background-color);}.search-loading{text-align:center;}.docblock-short{overflow-wrap:break-word;overflow-wrap:anywhere;}.docblock :not(pre)>code,.docblock-short code{white-space:pre-wrap;}.top-doc .docblock h2{font-size:1.375rem;}.top-doc .docblock h3{font-size:1.25rem;}.top-doc .docblock h4,.top-doc .docblock h5{font-size:1.125rem;}.top-doc .docblock h6{font-size:1rem;}.docblock h5{font-size:1rem;}.docblock h6{font-size:0.875rem;}.docblock{margin-left:24px;position:relative;}.docblock>:not(.more-examples-toggle):not(.example-wrap){max-width:100%;overflow-x:auto;}.out-of-band{flex-grow:0;font-size:1.125rem;}.docblock code,.docblock-short code,pre,.rustdoc.source .example-wrap{background-color:var(--code-block-background-color);}#main-content{position:relative;}.docblock table{margin:.5em 0;border-collapse:collapse;}.docblock table td,.docblock table th{padding:.5em;border:1px solid var(--border-color);}.docblock table tbody tr:nth-child(2n){background:var(--table-alt-row-background-color);}.method .where,.fn .where,.where.fmt-newline{display:block;white-space:pre-wrap;font-size:0.875rem;}.item-info{display:block;margin-left:24px;}.item-info code{font-size:0.875rem;}#main-content>.item-info{margin-left:0;}nav.sub{flex-grow:1;flex-flow:row nowrap;margin:4px 0 25px 0;display:flex;align-items:center;}.search-form{position:relative;display:flex;height:34px;flex-grow:1;}.source nav.sub{margin:0 0 15px 0;}.small-section-header{display:block;position:relative;}.small-section-header:hover>.anchor,.impl:hover>.anchor,.trait-impl:hover>.anchor,.variant:hover>.anchor{display:initial;}.anchor{display:none;position:absolute;left:-0.5em;background:none !important;}.anchor.field{left:-5px;}.small-section-header>.anchor{left:-15px;padding-right:8px;}h2.small-section-header>.anchor{padding-right:6px;}.main-heading a:hover,.example-wrap .rust a:hover,.all-items a:hover,.docblock a:not(.test-arrow):not(.scrape-help):not(.tooltip):hover,.docblock-short a:not(.test-arrow):not(.scrape-help):not(.tooltip):hover,.item-info a{text-decoration:underline;}.crate.block a.current{font-weight:500;}table,.item-table{overflow-wrap:break-word;}.item-table{display:table;padding:0;margin:0;}.item-table>li{display:table-row;}.item-table>li>div{display:table-cell;}.item-table>li>.item-name{padding-right:1.25rem;}.search-results-title{margin-top:0;white-space:nowrap;display:flex;align-items:baseline;}#crate-search-div{position:relative;min-width:5em;}#crate-search{min-width:115px;padding:0 23px 0 4px;max-width:100%;text-overflow:ellipsis;border:1px solid var(--border-color);border-radius:4px;outline:none;cursor:pointer;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;background-color:var(--main-background-color);color:inherit;line-height:1.5;font-weight:500;}#crate-search:hover,#crate-search:focus{border-color:var(--crate-search-hover-border);}@-moz-document url-prefix(){#crate-search{padding-left:0px;padding-right:19px;}}#crate-search-div::after{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0;content:"";background-repeat:no-repeat;background-size:20px;background-position:calc(100% - 2px) 56%;background-image:url('data:image/svg+xml, \ - ');filter:var(--crate-search-div-filter);}#crate-search-div:hover::after,#crate-search-div:focus-within::after{filter:var(--crate-search-div-hover-filter);}#crate-search>option{font-size:1rem;}.search-input{-webkit-appearance:none;outline:none;border:1px solid var(--border-color);border-radius:2px;padding:8px;font-size:1rem;flex-grow:1;background-color:var(--button-background-color);color:var(--search-color);}.search-input:focus{border-color:var(--search-input-focused-border-color);}.search-results{display:none;}.search-results.active{display:block;}.search-results>a{display:flex;margin-left:2px;margin-right:2px;border-bottom:1px solid var(--search-result-border-color);gap:1em;}.search-results>a>div.desc{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;flex:2;}.search-results a:hover,.search-results a:focus{background-color:var(--search-result-link-focus-background-color);}.search-results .result-name{display:flex;align-items:center;justify-content:start;flex:3;}.search-results .result-name span.alias{color:var(--search-results-alias-color);}.search-results .result-name .grey{color:var(--search-results-grey-color);}.search-results .result-name .typename{color:var(--search-results-grey-color);font-size:0.875rem;width:var(--search-typename-width);}.search-results .result-name .path{word-break:break-all;max-width:calc(100% - var(--search-typename-width));display:inline-block;}.popover{position:absolute;top:100%;right:0;z-index:2;margin-top:7px;border-radius:3px;border:1px solid var(--border-color);background-color:var(--main-background-color);color:var(--main-color);--popover-arrow-offset:11px;}.popover::before{content:'';position:absolute;right:var(--popover-arrow-offset);border:solid var(--border-color);border-width:1px 1px 0 0;background-color:var(--main-background-color);padding:4px;transform:rotate(-45deg);top:-5px;}#help.popover{max-width:600px;--popover-arrow-offset:48px;}#help dt{float:left;clear:left;margin-right:0.5rem;}#help span.top,#help span.bottom{text-align:center;display:block;font-size:1.125rem;}#help span.top{margin:10px 0;border-bottom:1px solid var(--border-color);padding-bottom:4px;margin-bottom:6px;}#help span.bottom{clear:both;border-top:1px solid var(--border-color);}.side-by-side>div{width:50%;float:left;padding:0 20px 20px 17px;}.item-info .stab{min-height:36px;display:flex;padding:3px;margin-bottom:5px;align-items:center;vertical-align:text-bottom;}.item-name .stab{margin-left:0.3125em;}.stab{padding:0 2px;font-size:0.875rem;font-weight:normal;color:var(--main-color);background-color:var(--stab-background-color);width:fit-content;white-space:pre-wrap;border-radius:3px;display:inline;}.stab.portability>code{background:none;color:var(--stab-code-color);}.stab .emoji{font-size:1.25rem;margin-right:0.3rem;}.emoji{text-shadow:1px 0 0 black,-1px 0 0 black,0 1px 0 black,0 -1px 0 black;}.since{font-weight:normal;font-size:initial;}.rightside{padding-left:12px;float:right;}.rightside:not(a),.out-of-band{color:var(--right-side-color);}pre.rust{tab-size:4;-moz-tab-size:4;}pre.rust .kw{color:var(--code-highlight-kw-color);}pre.rust .kw-2{color:var(--code-highlight-kw-2-color);}pre.rust .lifetime{color:var(--code-highlight-lifetime-color);}pre.rust .prelude-ty{color:var(--code-highlight-prelude-color);}pre.rust .prelude-val{color:var(--code-highlight-prelude-val-color);}pre.rust .string{color:var(--code-highlight-string-color);}pre.rust .number{color:var(--code-highlight-number-color);}pre.rust .bool-val{color:var(--code-highlight-literal-color);}pre.rust .self{color:var(--code-highlight-self-color);}pre.rust .attr{color:var(--code-highlight-attribute-color);}pre.rust .macro,pre.rust .macro-nonterminal{color:var(--code-highlight-macro-color);}pre.rust .question-mark{font-weight:bold;color:var(--code-highlight-question-mark-color);}pre.rust .comment{color:var(--code-highlight-comment-color);}pre.rust .doccomment{color:var(--code-highlight-doc-comment-color);}.rustdoc.source .example-wrap pre.rust a{background:var(--codeblock-link-background);}.example-wrap.compile_fail,.example-wrap.should_panic{border-left:2px solid var(--codeblock-error-color);}.ignore.example-wrap{border-left:2px solid var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover,.example-wrap.should_panic:hover{border-left:2px solid var(--codeblock-error-hover-color);}.example-wrap.ignore:hover{border-left:2px solid var(--codeblock-ignore-hover-color);}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip{color:var(--codeblock-error-color);}.example-wrap.ignore .tooltip{color:var(--codeblock-ignore-color);}.example-wrap.compile_fail:hover .tooltip,.example-wrap.should_panic:hover .tooltip{color:var(--codeblock-error-hover-color);}.example-wrap.ignore:hover .tooltip{color:var(--codeblock-ignore-hover-color);}.example-wrap .tooltip{position:absolute;display:block;left:-25px;top:5px;margin:0;line-height:1;}.example-wrap.compile_fail .tooltip,.example-wrap.should_panic .tooltip,.example-wrap.ignore .tooltip{font-weight:bold;font-size:1.25rem;}a.test-arrow{visibility:hidden;position:absolute;padding:5px 10px 5px 10px;border-radius:5px;font-size:1.375rem;top:5px;right:5px;z-index:1;color:var(--test-arrow-color);background-color:var(--test-arrow-background-color);}a.test-arrow:hover{color:var(--test-arrow-hover-color);background-color:var(--test-arrow-hover-background-color);}.example-wrap:hover .test-arrow{visibility:visible;}.code-attribute{font-weight:300;color:var(--code-attribute-color);}.item-spacer{width:100%;height:12px;display:block;}.out-of-band>span.since{font-size:1.25rem;}.sub-variant h4{font-size:1rem;font-weight:400;margin-top:0;margin-bottom:0;}.sub-variant{margin-left:24px;margin-bottom:40px;}.sub-variant>.sub-variant-field{margin-left:24px;}:target{padding-right:3px;background-color:var(--target-background-color);border-right:3px solid var(--target-border-color);}.code-header a.tooltip{color:inherit;margin-right:15px;position:relative;}.code-header a.tooltip:hover{color:var(--link-color);}a.tooltip:hover::after{position:absolute;top:calc(100% - 10px);left:-15px;right:-15px;height:20px;content:"\00a0";}.fade-out{opacity:0;transition:opacity 0.45s cubic-bezier(0,0,0.1,1.0);}.popover.tooltip .content{margin:0.25em 0.5em;}.popover.tooltip .content pre,.popover.tooltip .content code{background:transparent;margin:0;padding:0;font-size:1.25rem;white-space:pre-wrap;}.popover.tooltip .content>h3:first-child{margin:0 0 5px 0;}.search-failed{text-align:center;margin-top:20px;display:none;}.search-failed.active{display:block;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#search-tabs{display:flex;flex-direction:row;gap:1px;margin-bottom:4px;}#search-tabs button{text-align:center;font-size:1.125rem;border:0;border-top:2px solid;flex:1;line-height:1.5;color:inherit;}#search-tabs button:not(.selected){background-color:var(--search-tab-button-not-selected-background);border-top-color:var(--search-tab-button-not-selected-border-top-color);}#search-tabs button:hover,#search-tabs button.selected{background-color:var(--search-tab-button-selected-background);border-top-color:var(--search-tab-button-selected-border-top-color);}#search-tabs .count{font-size:1rem;color:var(--search-tab-title-count-color);}#search .error code{border-radius:3px;background-color:var(--search-error-code-background-color);}.search-corrections{font-weight:normal;}#src-sidebar-toggle{position:sticky;top:0;left:0;font-size:1.25rem;border-bottom:1px solid;display:flex;height:40px;justify-content:stretch;align-items:stretch;z-index:10;}#source-sidebar{width:100%;overflow:auto;}#source-sidebar>.title{font-size:1.5rem;text-align:center;border-bottom:1px solid var(--border-color);margin-bottom:6px;}#source-sidebar div.files>a:hover,details.dir-entry summary:hover,#source-sidebar div.files>a:focus,details.dir-entry summary:focus{background-color:var(--source-sidebar-background-hover);}#source-sidebar div.files>a.selected{background-color:var(--source-sidebar-background-selected);}#src-sidebar-toggle>button{font-size:inherit;font-weight:bold;background:none;color:inherit;text-align:center;border:none;outline:none;flex:1 1;-webkit-appearance:none;opacity:1;}#settings-menu,#help-button{margin-left:4px;display:flex;}#settings-menu>a,#help-button>a{display:flex;align-items:center;justify-content:center;background-color:var(--button-background-color);border:1px solid var(--border-color);border-radius:2px;color:var(--settings-button-color);font-size:20px;width:33px;}#settings-menu>a:hover,#settings-menu>a:focus,#help-button>a:hover,#help-button>a:focus{border-color:var(--settings-button-border-focus);}#copy-path{color:var(--copy-path-button-color);background:var(--main-background-color);height:34px;margin-left:10px;padding:0;padding-left:2px;border:0;width:33px;}#copy-path>img{filter:var(--copy-path-img-filter);}#copy-path:hover>img{filter:var(--copy-path-img-hover-filter);}@keyframes rotating{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}#settings-menu.rotate>a img{animation:rotating 2s linear infinite;}kbd{display:inline-block;padding:3px 5px;font:15px monospace;line-height:10px;vertical-align:middle;border:solid 1px var(--border-color);border-radius:3px;color:var(--kbd-color);background-color:var(--kbd-background);box-shadow:inset 0 -1px 0 var(--kbd-box-shadow-color);}ul.all-items>li{list-style:none;}details.dir-entry{padding-left:4px;}details.dir-entry>summary{margin:0 0 0 -4px;padding:0 0 0 4px;cursor:pointer;}details.dir-entry div.folders,details.dir-entry div.files{padding-left:23px;}details.dir-entry a{display:block;}details.toggle{contain:layout;position:relative;}details.toggle>summary.hideme{cursor:pointer;font-size:1rem;}details.toggle>summary{list-style:none;outline:none;}details.toggle>summary::-webkit-details-marker,details.toggle>summary::marker{display:none;}details.toggle>summary.hideme>span{margin-left:9px;}details.toggle>summary::before{background:url('data:image/svg+xml,') no-repeat top left;content:"";cursor:pointer;width:16px;height:16px;display:inline-block;vertical-align:middle;opacity:.5;filter:var(--toggle-filter);}details.toggle>summary.hideme>span,.more-examples-toggle summary,.more-examples-toggle .hide-more{color:var(--toggles-color);}details.toggle>summary::after{content:"Expand";overflow:hidden;width:0;height:0;position:absolute;}details.toggle>summary.hideme::after{content:"";}details.toggle>summary:focus::before,details.toggle>summary:hover::before{opacity:1;}details.toggle>summary:focus-visible::before{outline:1px dotted #000;outline-offset:1px;}details.non-exhaustive{margin-bottom:8px;}details.toggle>summary.hideme::before{position:relative;}details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;top:4px;}.impl-items>details.toggle>summary:not(.hideme)::before{position:absolute;left:-24px;}details.toggle[open] >summary.hideme{position:absolute;}details.toggle[open] >summary.hideme>span{display:none;}details.toggle[open] >summary::before{background:url('data:image/svg+xml,') no-repeat top left;}details.toggle[open] >summary::after{content:"Collapse";}.docblock summary>*{display:inline-block;}.docblock>.example-wrap:first-child .tooltip{margin-top:16px;}@media (max-width:700px){*[id]{scroll-margin-top:45px;}.rustdoc{display:block;}main{padding-left:15px;padding-top:0px;}.main-heading{flex-direction:column;}.out-of-band{text-align:left;margin-left:initial;padding:initial;}.out-of-band .since::before{content:"Since ";}.sidebar .logo-container,.sidebar .location{display:none;}.sidebar{position:fixed;top:45px;left:-1000px;z-index:11;height:calc(100vh - 45px);width:200px;}.source main,.rustdoc.source .sidebar{top:0;padding:0;height:100vh;border:0;}.sidebar.shown,.source-sidebar-expanded .source .sidebar,.rustdoc:not(.source) .sidebar:focus-within{left:0;}.mobile-topbar h2{padding-bottom:0;margin:auto 0.5em auto auto;overflow:hidden;font-size:24px;}.mobile-topbar h2 a{display:block;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;}.mobile-topbar .logo-container>img{max-width:35px;max-height:35px;margin:5px 0 5px 20px;}.mobile-topbar{display:flex;flex-direction:row;position:sticky;z-index:10;font-size:2rem;height:45px;width:100%;left:0;top:0;}.sidebar-menu-toggle{width:45px;font-size:32px;border:none;color:var(--main-color);}.sidebar-elems{margin-top:1em;}.anchor{display:none !important;}#search-tabs .count{display:block;}#main-content>details.toggle>summary::before,#main-content>div>details.toggle>summary::before{left:-11px;}#src-sidebar-toggle{position:fixed;left:1px;top:100px;width:30px;font-size:1.5rem;padding:0;z-index:10;border-top-right-radius:3px;border-bottom-right-radius:3px;border:1px solid;border-left:0;}.source-sidebar-expanded #src-sidebar-toggle{left:unset;top:unset;width:unset;border-top-right-radius:unset;border-bottom-right-radius:unset;position:sticky;border:0;border-bottom:1px solid;}#copy-path,#help-button{display:none;}.item-table,.item-row,.item-table>li,.item-table>li>div,.search-results>a,.search-results>a>div{display:block;}.search-results>a{padding:5px 0px;}.search-results>a>div.desc,.item-table>li>div.desc{padding-left:2em;}.search-results .result-name{display:block;}.search-results .result-name .typename{width:initial;margin-right:0;}.search-results .result-name .typename,.search-results .result-name .path{display:inline;}.source-sidebar-expanded .source .sidebar{max-width:100vw;width:100vw;}details.toggle:not(.top-doc)>summary{margin-left:10px;}.impl-items>details.toggle>summary:not(.hideme)::before,#main-content>details.toggle:not(.top-doc)>summary::before,#main-content>div>details.toggle>summary::before{left:-11px;}.impl-items>.item-info{margin-left:34px;}.source nav.sub{margin:0;padding:var(--nav-sub-mobile-padding);}}@media (min-width:701px){.scraped-example-title{position:absolute;z-index:10;background:var(--main-background-color);bottom:8px;right:5px;padding:2px 4px;box-shadow:0 0 4px var(--main-background-color);}}@media print{nav.sidebar,nav.sub,.out-of-band,a.srclink,#copy-path,details.toggle[open] >summary::before,details.toggle>summary::before,details.toggle.top-doc>summary{display:none;}.docblock{margin-left:0;}main{padding:10px;}}@media (max-width:464px){.docblock{margin-left:12px;}.docblock code{overflow-wrap:break-word;overflow-wrap:anywhere;}nav.sub{flex-direction:column;}.search-form{align-self:stretch;}.sub-logo-container>img{height:35px;width:35px;margin-bottom:var(--nav-sub-mobile-padding);}}.variant,.implementors-toggle>summary,.impl,#implementors-list>.docblock,.impl-items>section,.impl-items>.toggle>summary,.methods>section,.methods>.toggle>summary{margin-bottom:0.75em;}.variants>.docblock,.implementors-toggle>.docblock,.impl-items>.toggle[open]:not(:last-child),.methods>.toggle[open]:not(:last-child),.implementors-toggle[open]:not(:last-child){margin-bottom:2em;}#trait-implementations-list .impl-items>.toggle:not(:last-child),#synthetic-implementations-list .impl-items>.toggle:not(:last-child),#blanket-implementations-list .impl-items>.toggle:not(:last-child){margin-bottom:1em;}.scraped-example-list .scrape-help{margin-left:10px;padding:0 4px;font-weight:normal;font-size:12px;position:relative;bottom:1px;border:1px solid var(--scrape-example-help-border-color);border-radius:50px;color:var(--scrape-example-help-color);}.scraped-example-list .scrape-help:hover{border-color:var(--scrape-example-help-hover-border-color);color:var(--scrape-example-help-hover-color);}.scraped-example{position:relative;}.scraped-example .code-wrapper{position:relative;display:flex;flex-direction:row;flex-wrap:wrap;width:100%;}.scraped-example:not(.expanded) .code-wrapper{max-height:calc(1.5em * 5 + 10px);}.scraped-example:not(.expanded) .code-wrapper pre{overflow-y:hidden;padding-bottom:0;max-height:calc(1.5em * 5 + 10px);}.more-scraped-examples .scraped-example:not(.expanded) .code-wrapper,.more-scraped-examples .scraped-example:not(.expanded) .code-wrapper pre{max-height:calc(1.5em * 10 + 10px);}.scraped-example .code-wrapper .next,.scraped-example .code-wrapper .prev,.scraped-example .code-wrapper .expand{color:var(--main-color);position:absolute;top:0.25em;z-index:1;padding:0;background:none;border:none;-webkit-appearance:none;opacity:1;}.scraped-example .code-wrapper .prev{right:2.25em;}.scraped-example .code-wrapper .next{right:1.25em;}.scraped-example .code-wrapper .expand{right:0.25em;}.scraped-example:not(.expanded) .code-wrapper::before,.scraped-example:not(.expanded) .code-wrapper::after{content:" ";width:100%;height:5px;position:absolute;z-index:1;}.scraped-example:not(.expanded) .code-wrapper::before{top:0;background:linear-gradient(to bottom,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example:not(.expanded) .code-wrapper::after{bottom:0;background:linear-gradient(to top,var(--scrape-example-code-wrapper-background-start),var(--scrape-example-code-wrapper-background-end));}.scraped-example .code-wrapper .example-wrap{width:100%;overflow-y:hidden;margin-bottom:0;}.scraped-example:not(.expanded) .code-wrapper .example-wrap{overflow-x:hidden;}.scraped-example .example-wrap .rust span.highlight{background:var(--scrape-example-code-line-highlight);}.scraped-example .example-wrap .rust span.highlight.focus{background:var(--scrape-example-code-line-highlight-focus);}.more-examples-toggle{max-width:calc(100% + 25px);margin-top:10px;margin-left:-25px;}.more-examples-toggle .hide-more{margin-left:25px;cursor:pointer;}.more-scraped-examples{margin-left:25px;position:relative;}.toggle-line{position:absolute;top:5px;bottom:0;right:calc(100% + 10px);padding:0 4px;cursor:pointer;}.toggle-line-inner{min-width:2px;height:100%;background:var(--scrape-example-toggle-line-background);}.toggle-line:hover .toggle-line-inner{background:var(--scrape-example-toggle-line-hover-background);}.more-scraped-examples .scraped-example,.example-links{margin-top:20px;}.more-scraped-examples .scraped-example:first-child{margin-top:5px;}.example-links ul{margin-bottom:0;} \ No newline at end of file diff --git a/static.files/search-dd67cee4cfa65049.js b/static.files/search-dd67cee4cfa65049.js new file mode 100644 index 00000000..ef8bf865 --- /dev/null +++ b/static.files/search-dd67cee4cfa65049.js @@ -0,0 +1,5 @@ +"use strict";if(!Array.prototype.toSpliced){Array.prototype.toSpliced=function(){const me=this.slice();Array.prototype.splice.apply(me,arguments);return me}}(function(){const itemTypes=["keyword","primitive","mod","externcrate","import","struct","enum","fn","type","static","trait","impl","tymethod","method","structfield","variant","macro","associatedtype","constant","associatedconstant","union","foreigntype","existential","attr","derive","traitalias","generic",];const longItemTypes=["keyword","primitive type","module","extern crate","re-export","struct","enum","function","type alias","static","trait","","trait method","method","struct field","enum variant","macro","assoc type","constant","assoc const","union","foreign type","existential type","attribute macro","derive macro","trait alias",];const TY_GENERIC=itemTypes.indexOf("generic");const ROOT_PATH=typeof window!=="undefined"?window.rootPath:"../";function printTab(nb){let iter=0;let foundCurrentTab=false;let foundCurrentResultSet=false;onEachLazy(document.getElementById("search-tabs").childNodes,elem=>{if(nb===iter){addClass(elem,"selected");foundCurrentTab=true}else{removeClass(elem,"selected")}iter+=1});const isTypeSearch=(nb>0||iter===1);iter=0;onEachLazy(document.getElementById("results").childNodes,elem=>{if(nb===iter){addClass(elem,"active");foundCurrentResultSet=true}else{removeClass(elem,"active")}iter+=1});if(foundCurrentTab&&foundCurrentResultSet){searchState.currentTab=nb;const correctionsElem=document.getElementsByClassName("search-corrections");if(isTypeSearch){removeClass(correctionsElem[0],"hidden")}else{addClass(correctionsElem[0],"hidden")}}else if(nb!==0){printTab(0)}}const editDistanceState={current:[],prev:[],prevPrev:[],calculate:function calculate(a,b,limit){if(a.lengthlimit){return limit+1}while(b.length>0&&b[0]===a[0]){a=a.substring(1);b=b.substring(1)}while(b.length>0&&b[b.length-1]===a[a.length-1]){a=a.substring(0,a.length-1);b=b.substring(0,b.length-1)}if(b.length===0){return minDist}const aLength=a.length;const bLength=b.length;for(let i=0;i<=bLength;++i){this.current[i]=0;this.prev[i]=i;this.prevPrev[i]=Number.MAX_VALUE}for(let i=1;i<=aLength;++i){this.current[0]=i;const aIdx=i-1;for(let j=1;j<=bLength;++j){const bIdx=j-1;const substitutionCost=a[aIdx]===b[bIdx]?0:1;this.current[j]=Math.min(this.prev[j]+1,this.current[j-1]+1,this.prev[j-1]+substitutionCost);if((i>1)&&(j>1)&&(a[aIdx]===b[bIdx-1])&&(a[aIdx-1]===b[bIdx])){this.current[j]=Math.min(this.current[j],this.prevPrev[j-2]+1)}}const prevPrevTmp=this.prevPrev;this.prevPrev=this.prev;this.prev=this.current;this.current=prevPrevTmp}const distance=this.prev[bLength];return distance<=limit?distance:(limit+1)},};function editDistance(a,b,limit){return editDistanceState.calculate(a,b,limit)}function initSearch(rawSearchIndex){const MAX_RESULTS=200;const NO_TYPE_FILTER=-1;let searchIndex;let functionTypeFingerprint;let currentResults;let typeNameIdMap;const ALIASES=new Map();let typeNameIdOfArray;let typeNameIdOfSlice;let typeNameIdOfArrayOrSlice;let typeNameIdOfTuple;let typeNameIdOfUnit;let typeNameIdOfTupleOrUnit;function buildTypeMapIndex(name,isAssocType){if(name===""||name===null){return null}if(typeNameIdMap.has(name)){const obj=typeNameIdMap.get(name);obj.assocOnly=isAssocType&&obj.assocOnly;return obj.id}else{const id=typeNameIdMap.size;typeNameIdMap.set(name,{id,assocOnly:isAssocType});return id}}function isSpecialStartCharacter(c){return"<\"".indexOf(c)!==-1}function isEndCharacter(c){return"=,>-])".indexOf(c)!==-1}function itemTypeFromName(typename){const index=itemTypes.findIndex(i=>i===typename);if(index<0){throw["Unknown type filter ",typename]}return index}function getStringElem(query,parserState,isInGenerics){if(isInGenerics){throw["Unexpected ","\""," in generics"]}else if(query.literalSearch){throw["Cannot have more than one literal search element"]}else if(parserState.totalElems-parserState.genericsElems>0){throw["Cannot use literal search when there is more than one element"]}parserState.pos+=1;const start=parserState.pos;const end=getIdentEndPosition(parserState);if(parserState.pos>=parserState.length){throw["Unclosed ","\""]}else if(parserState.userQuery[end]!=="\""){throw["Unexpected ",parserState.userQuery[end]," in a string element"]}else if(start===end){throw["Cannot have empty string element"]}parserState.pos+=1;query.literalSearch=true}function isPathStart(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="::"}function isReturnArrow(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="->"}function isIdentCharacter(c){return(c==="_"||(c>="0"&&c<="9")||(c>="a"&&c<="z")||(c>="A"&&c<="Z"))}function isSeparatorCharacter(c){return c===","||c==="="}function isPathSeparator(c){return c===":"||c===" "}function prevIs(parserState,lookingFor){let pos=parserState.pos;while(pos>0){const c=parserState.userQuery[pos-1];if(c===lookingFor){return true}else if(c!==" "){break}pos-=1}return false}function isLastElemGeneric(elems,parserState){return(elems.length>0&&elems[elems.length-1].generics.length>0)||prevIs(parserState,">")}function skipWhitespace(parserState){while(parserState.pos0){throw["Cannot have more than one element if you use quotes"]}const typeFilter=parserState.typeFilter;parserState.typeFilter=null;if(name==="!"){if(typeFilter!==null&&typeFilter!=="primitive"){throw["Invalid search type: primitive never type ","!"," and ",typeFilter," both specified",]}if(generics.length!==0){throw["Never type ","!"," does not accept generic parameters",]}const bindingName=parserState.isInBinding;parserState.isInBinding=null;return{name:"never",id:null,fullPath:["never"],pathWithoutLast:[],pathLast:"never",normalizedPathLast:"never",generics:[],bindings:new Map(),typeFilter:"primitive",bindingName,}}const quadcolon=/::\s*::/.exec(path);if(path.startsWith("::")){throw["Paths cannot start with ","::"]}else if(path.endsWith("::")){throw["Paths cannot end with ","::"]}else if(quadcolon!==null){throw["Unexpected ",quadcolon[0]]}const pathSegments=path.split(/(?:::\s*)|(?:\s+(?:::\s*)?)/);if(pathSegments.length===0||(pathSegments.length===1&&pathSegments[0]==="")){if(generics.length>0||prevIs(parserState,">")){throw["Found generics without a path"]}else{throw["Unexpected ",parserState.userQuery[parserState.pos]]}}for(const[i,pathSegment]of pathSegments.entries()){if(pathSegment==="!"){if(i!==0){throw["Never type ","!"," is not associated item"]}pathSegments[i]="never"}}parserState.totalElems+=1;if(isInGenerics){parserState.genericsElems+=1}const bindingName=parserState.isInBinding;parserState.isInBinding=null;const bindings=new Map();const pathLast=pathSegments[pathSegments.length-1];return{name:name.trim(),id:null,fullPath:pathSegments,pathWithoutLast:pathSegments.slice(0,pathSegments.length-1),pathLast,normalizedPathLast:pathLast.replace(/_/g,""),generics:generics.filter(gen=>{if(gen.bindingName!==null){bindings.set(gen.bindingName.name,[gen,...gen.bindingName.generics]);return false}return true}),bindings,typeFilter,bindingName,}}function getIdentEndPosition(parserState){const start=parserState.pos;let end=parserState.pos;let foundExclamation=-1;while(parserState.pos0){throw["Unexpected ",c," after ",parserState.userQuery[parserState.pos-1]]}else{throw["Unexpected ",c]}}parserState.pos+=1;end=parserState.pos}if(foundExclamation!==-1&&foundExclamation!==start&&isIdentCharacter(parserState.userQuery[foundExclamation-1])){if(parserState.typeFilter===null){parserState.typeFilter="macro"}else if(parserState.typeFilter!=="macro"){throw["Invalid search type: macro ","!"," and ",parserState.typeFilter," both specified",]}end=foundExclamation}return end}function getNextElem(query,parserState,elems,isInGenerics){const generics=[];skipWhitespace(parserState);let start=parserState.pos;let end;if("[(".indexOf(parserState.userQuery[parserState.pos])!==-1){let endChar=")";let name="()";let friendlyName="tuple";if(parserState.userQuery[parserState.pos]==="["){endChar="]";name="[]";friendlyName="slice"}parserState.pos+=1;const{foundSeparator}=getItemsBefore(query,parserState,generics,endChar);const typeFilter=parserState.typeFilter;const isInBinding=parserState.isInBinding;if(typeFilter!==null&&typeFilter!=="primitive"){throw["Invalid search type: primitive ",name," and ",typeFilter," both specified",]}parserState.typeFilter=null;parserState.isInBinding=null;for(const gen of generics){if(gen.bindingName!==null){throw["Type parameter ","=",` cannot be within ${friendlyName} `,name]}}if(name==="()"&&!foundSeparator&&generics.length===1&&typeFilter===null){elems.push(generics[0])}else{parserState.totalElems+=1;if(isInGenerics){parserState.genericsElems+=1}elems.push({name:name,id:null,fullPath:[name],pathWithoutLast:[],pathLast:name,normalizedPathLast:name,generics,bindings:new Map(),typeFilter:"primitive",bindingName:isInBinding,})}}else{const isStringElem=parserState.userQuery[start]==="\"";if(isStringElem){start+=1;getStringElem(query,parserState,isInGenerics);end=parserState.pos-1}else{end=getIdentEndPosition(parserState)}if(parserState.pos=end){throw["Found generics without a path"]}parserState.pos+=1;getItemsBefore(query,parserState,generics,">")}if(isStringElem){skipWhitespace(parserState)}if(start>=end&&generics.length===0){return}if(parserState.userQuery[parserState.pos]==="="){if(parserState.isInBinding){throw["Cannot write ","="," twice in a binding"]}if(!isInGenerics){throw["Type parameter ","="," must be within generics list"]}const name=parserState.userQuery.slice(start,end).trim();if(name==="!"){throw["Type parameter ","="," key cannot be ","!"," never type"]}if(name.includes("!")){throw["Type parameter ","="," key cannot be ","!"," macro"]}if(name.includes("::")){throw["Type parameter ","="," key cannot contain ","::"," path"]}if(name.includes(":")){throw["Type parameter ","="," key cannot contain ",":"," type"]}parserState.isInBinding={name,generics}}else{elems.push(createQueryElement(query,parserState,parserState.userQuery.slice(start,end),generics,isInGenerics))}}}function getItemsBefore(query,parserState,elems,endChar){let foundStopChar=true;let foundSeparator=false;let start=parserState.pos;const oldTypeFilter=parserState.typeFilter;parserState.typeFilter=null;const oldIsInBinding=parserState.isInBinding;parserState.isInBinding=null;let extra="";if(endChar===">"){extra="<"}else if(endChar==="]"){extra="["}else if(endChar===")"){extra="("}else if(endChar===""){extra="->"}else{extra=endChar}while(parserState.pos"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(endChar!==""){throw["Expected ",",",", ","=",", or ",endChar,...extra,", found ",c,]}throw["Expected ",","," or ","=",...extra,", found ",c,]}const posBefore=parserState.pos;start=parserState.pos;getNextElem(query,parserState,elems,endChar!=="");if(endChar!==""&&parserState.pos>=parserState.length){throw["Unclosed ",extra]}if(posBefore===parserState.pos){parserState.pos+=1}foundStopChar=false}if(parserState.pos>=parserState.length&&endChar!==""){throw["Unclosed ",extra]}parserState.pos+=1;parserState.typeFilter=oldTypeFilter;parserState.isInBinding=oldIsInBinding;return{foundSeparator}}function checkExtraTypeFilterCharacters(start,parserState){const query=parserState.userQuery.slice(start,parserState.pos).trim();for(const c in query){if(!isIdentCharacter(query[c])){throw["Unexpected ",query[c]," in type filter (before ",":",")",]}}}function parseInput(query,parserState){let foundStopChar=true;let start=parserState.pos;while(parserState.pos"){if(isReturnArrow(parserState)){break}throw["Unexpected ",c," (did you mean ","->","?)"]}else if(parserState.pos>0){throw["Unexpected ",c," after ",parserState.userQuery[parserState.pos-1]]}throw["Unexpected ",c]}else if(c===":"&&!isPathStart(parserState)){if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}else if(query.elems.length===0){throw["Expected type filter before ",":"]}else if(query.literalSearch){throw["Cannot use quotes on type filter"]}const typeFilterElem=query.elems.pop();checkExtraTypeFilterCharacters(start,parserState);parserState.typeFilter=typeFilterElem.name;parserState.pos+=1;parserState.totalElems-=1;query.literalSearch=false;foundStopChar=true;continue}else if(c===" "){skipWhitespace(parserState);continue}if(!foundStopChar){let extra="";if(isLastElemGeneric(query.elems,parserState)){extra=[" after ",">"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(parserState.typeFilter!==null){throw["Expected ",","," or ","->",...extra,", found ",c,]}throw["Expected ",",",", ",":"," or ","->",...extra,", found ",c,]}const before=query.elems.length;start=parserState.pos;getNextElem(query,parserState,query.elems,false);if(query.elems.length===before){parserState.pos+=1}foundStopChar=false}if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}while(parserState.pos"]}break}else{parserState.pos+=1}}}function newParsedQuery(userQuery){return{original:userQuery,userQuery:userQuery.toLowerCase(),elems:[],returned:[],foundElems:0,totalElems:0,literalSearch:false,error:null,correction:null,proposeCorrectionFrom:null,proposeCorrectionTo:null,typeFingerprint:new Uint32Array(4),}}function buildUrl(search,filterCrates){let extra="?search="+encodeURIComponent(search);if(filterCrates!==null){extra+="&filter-crate="+encodeURIComponent(filterCrates)}return getNakedUrl()+extra+window.location.hash}function getFilterCrates(){const elem=document.getElementById("crate-search");if(elem&&elem.value!=="all crates"&&rawSearchIndex.has(elem.value)){return elem.value}return null}function parseQuery(userQuery){function convertTypeFilterOnElem(elem){if(elem.typeFilter!==null){let typeFilter=elem.typeFilter;if(typeFilter==="const"){typeFilter="constant"}elem.typeFilter=itemTypeFromName(typeFilter)}else{elem.typeFilter=NO_TYPE_FILTER}for(const elem2 of elem.generics){convertTypeFilterOnElem(elem2)}for(const constraints of elem.bindings.values()){for(const constraint of constraints){convertTypeFilterOnElem(constraint)}}}userQuery=userQuery.trim().replace(/\r|\n|\t/g," ");const parserState={length:userQuery.length,pos:0,totalElems:0,genericsElems:0,typeFilter:null,isInBinding:null,userQuery:userQuery.toLowerCase(),};let query=newParsedQuery(userQuery);try{parseInput(query,parserState);for(const elem of query.elems){convertTypeFilterOnElem(elem)}for(const elem of query.returned){convertTypeFilterOnElem(elem)}}catch(err){query=newParsedQuery(userQuery);query.error=err;return query}if(!query.literalSearch){query.literalSearch=parserState.totalElems>1}query.foundElems=query.elems.length+query.returned.length;query.totalElems=parserState.totalElems;return query}function createQueryResults(results_in_args,results_returned,results_others,parsedQuery){return{"in_args":results_in_args,"returned":results_returned,"others":results_others,"query":parsedQuery,}}function execQuery(parsedQuery,filterCrates,currentCrate){const results_others=new Map(),results_in_args=new Map(),results_returned=new Map();function transformResults(results){const duplicates=new Set();const out=[];for(const result of results){if(result.id!==-1){const obj=searchIndex[result.id];obj.dist=result.dist;const res=buildHrefAndPath(obj);obj.displayPath=pathSplitter(res[0]);obj.fullPath=obj.displayPath+obj.name;obj.fullPath+="|"+obj.ty;if(duplicates.has(obj.fullPath)){continue}duplicates.add(obj.fullPath);obj.href=res[1];out.push(obj);if(out.length>=MAX_RESULTS){break}}}return out}function sortResults(results,isType,preferredCrate){if(results.size===0){return[]}const userQuery=parsedQuery.userQuery;const result_list=[];for(const result of results.values()){result.item=searchIndex[result.id];result.word=searchIndex[result.id].word;result_list.push(result)}result_list.sort((aaa,bbb)=>{let a,b;a=(aaa.word!==userQuery);b=(bbb.word!==userQuery);if(a!==b){return a-b}a=(aaa.index<0);b=(bbb.index<0);if(a!==b){return a-b}a=aaa.path_dist;b=bbb.path_dist;if(a!==b){return a-b}a=aaa.index;b=bbb.index;if(a!==b){return a-b}a=(aaa.dist);b=(bbb.dist);if(a!==b){return a-b}a=aaa.item.deprecated;b=bbb.item.deprecated;if(a!==b){return a-b}a=(aaa.item.crate!==preferredCrate);b=(bbb.item.crate!==preferredCrate);if(a!==b){return a-b}a=aaa.word.length;b=bbb.word.length;if(a!==b){return a-b}a=aaa.word;b=bbb.word;if(a!==b){return(a>b?+1:-1)}a=(aaa.item.desc==="");b=(bbb.item.desc==="");if(a!==b){return a-b}a=aaa.item.ty;b=bbb.item.ty;if(a!==b){return a-b}a=aaa.item.path;b=bbb.item.path;if(a!==b){return(a>b?+1:-1)}return 0});return transformResults(result_list)}function unifyFunctionTypes(fnTypesIn,queryElems,whereClause,mgensIn,solutionCb){const mgens=mgensIn===null?null:new Map(mgensIn);if(queryElems.length===0){return!solutionCb||solutionCb(mgens)}if(!fnTypesIn||fnTypesIn.length===0){return false}const ql=queryElems.length;const fl=fnTypesIn.length;if(ql===1&&queryElems[0].generics.length===0&&queryElems[0].bindings.size===0){const queryElem=queryElems[0];for(const fnType of fnTypesIn){if(!unifyFunctionTypeIsMatchCandidate(fnType,queryElem,whereClause,mgens)){continue}if(fnType.id<0&&queryElem.id<0){if(mgens&&mgens.has(fnType.id)&&mgens.get(fnType.id)!==queryElem.id){continue}const mgensScratch=new Map(mgens);mgensScratch.set(fnType.id,queryElem.id);if(!solutionCb||solutionCb(mgensScratch)){return true}}else if(!solutionCb||solutionCb(mgens?new Map(mgens):null)){return true}}for(const fnType of fnTypesIn){if(!unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens)){continue}if(fnType.id<0){if(mgens&&mgens.has(fnType.id)&&mgens.get(fnType.id)!==0){continue}const mgensScratch=new Map(mgens);mgensScratch.set(fnType.id,0);if(unifyFunctionTypes(whereClause[(-fnType.id)-1],queryElems,whereClause,mgensScratch,solutionCb)){return true}}else if(unifyFunctionTypes([...fnType.generics,...Array.from(fnType.bindings.values()).flat()],queryElems,whereClause,mgens?new Map(mgens):null,solutionCb)){return true}}return false}const fnTypes=fnTypesIn.slice();const flast=fl-1;const qlast=ql-1;const queryElem=queryElems[qlast];let queryElemsTmp=null;for(let i=flast;i>=0;i-=1){const fnType=fnTypes[i];if(!unifyFunctionTypeIsMatchCandidate(fnType,queryElem,whereClause,mgens)){continue}let mgensScratch;if(fnType.id<0){mgensScratch=new Map(mgens);if(mgensScratch.has(fnType.id)&&mgensScratch.get(fnType.id)!==queryElem.id){continue}mgensScratch.set(fnType.id,queryElem.id)}else{mgensScratch=mgens}fnTypes[i]=fnTypes[flast];fnTypes.length=flast;if(!queryElemsTmp){queryElemsTmp=queryElems.slice(0,qlast)}const passesUnification=unifyFunctionTypes(fnTypes,queryElemsTmp,whereClause,mgensScratch,mgensScratch=>{if(fnType.generics.length===0&&queryElem.generics.length===0&&fnType.bindings.size===0&&queryElem.bindings.size===0){return!solutionCb||solutionCb(mgensScratch)}const solution=unifyFunctionTypeCheckBindings(fnType,queryElem,whereClause,mgensScratch);if(!solution){return false}const simplifiedGenerics=solution.simplifiedGenerics;for(const simplifiedMgens of solution.mgens){const passesUnification=unifyFunctionTypes(simplifiedGenerics,queryElem.generics,whereClause,simplifiedMgens,solutionCb);if(passesUnification){return true}}return false});if(passesUnification){return true}fnTypes[flast]=fnTypes[i];fnTypes[i]=fnType;fnTypes.length=fl}for(let i=flast;i>=0;i-=1){const fnType=fnTypes[i];if(!unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens)){continue}let mgensScratch;if(fnType.id<0){mgensScratch=new Map(mgens);if(mgensScratch.has(fnType.id)&&mgensScratch.get(fnType.id)!==0){continue}mgensScratch.set(fnType.id,0)}else{mgensScratch=mgens}const generics=fnType.id<0?whereClause[(-fnType.id)-1]:fnType.generics;const bindings=fnType.bindings?Array.from(fnType.bindings.values()).flat():[];const passesUnification=unifyFunctionTypes(fnTypes.toSpliced(i,1,...generics,...bindings),queryElems,whereClause,mgensScratch,solutionCb);if(passesUnification){return true}}return false}function unifyFunctionTypeIsMatchCandidate(fnType,queryElem,whereClause,mgensIn){if(!typePassesFilter(queryElem.typeFilter,fnType.ty)){return false}if(fnType.id<0&&queryElem.id<0){if(mgensIn){if(mgensIn.has(fnType.id)&&mgensIn.get(fnType.id)!==queryElem.id){return false}for(const[fid,qid]of mgensIn.entries()){if(fnType.id!==fid&&queryElem.id===qid){return false}if(fnType.id===fid&&queryElem.id!==qid){return false}}}return true}else{if(queryElem.id===typeNameIdOfArrayOrSlice&&(fnType.id===typeNameIdOfSlice||fnType.id===typeNameIdOfArray)){}else if(queryElem.id===typeNameIdOfTupleOrUnit&&(fnType.id===typeNameIdOfTuple||fnType.id===typeNameIdOfUnit)){}else if(fnType.id!==queryElem.id||queryElem.id===null){return false}if((fnType.generics.length+fnType.bindings.size)===0&&queryElem.generics.length!==0){return false}if(fnType.bindings.size0){const fnTypePath=fnType.path!==undefined&&fnType.path!==null?fnType.path.split("::"):[];if(queryElemPathLength>fnTypePath.length){return false}let i=0;for(const path of fnTypePath){if(path===queryElem.pathWithoutLast[i]){i+=1;if(i>=queryElemPathLength){break}}}if(i0){let mgensSolutionSet=[mgensIn];for(const[name,constraints]of queryElem.bindings.entries()){if(mgensSolutionSet.length===0){return false}if(!fnType.bindings.has(name)){return false}const fnTypeBindings=fnType.bindings.get(name);mgensSolutionSet=mgensSolutionSet.flatMap(mgens=>{const newSolutions=[];unifyFunctionTypes(fnTypeBindings,constraints,whereClause,mgens,newMgens=>{newSolutions.push(newMgens);return false});return newSolutions})}if(mgensSolutionSet.length===0){return false}const binds=Array.from(fnType.bindings.entries()).flatMap(entry=>{const[name,constraints]=entry;if(queryElem.bindings.has(name)){return[]}else{return constraints}});if(simplifiedGenerics.length>0){simplifiedGenerics=[...simplifiedGenerics,...binds]}else{simplifiedGenerics=binds}return{simplifiedGenerics,mgens:mgensSolutionSet}}return{simplifiedGenerics,mgens:[mgensIn]}}function unifyFunctionTypeIsUnboxCandidate(fnType,queryElem,whereClause,mgens){if(fnType.id<0&&queryElem.id>=0){if(!whereClause){return false}if(mgens&&mgens.has(fnType.id)&&mgens.get(fnType.id)!==0){return false}const mgensTmp=new Map(mgens);mgensTmp.set(fnType.id,null);return checkIfInList(whereClause[(-fnType.id)-1],queryElem,whereClause,mgensTmp)}else if(fnType.generics.length>0||fnType.bindings.size>0){const simplifiedGenerics=[...fnType.generics,...Array.from(fnType.bindings.values()).flat(),];return checkIfInList(simplifiedGenerics,queryElem,whereClause,mgens)}return false}function checkIfInList(list,elem,whereClause,mgens){for(const entry of list){if(checkType(entry,elem,whereClause,mgens)){return true}}return false}function checkType(row,elem,whereClause,mgens){if(row.bindings.size===0&&elem.bindings.size===0){if(elem.id<0){return row.id<0||checkIfInList(row.generics,elem,whereClause,mgens)}if(row.id>0&&elem.id>0&&elem.pathWithoutLast.length===0&&typePassesFilter(elem.typeFilter,row.ty)&&elem.generics.length===0&&elem.id!==typeNameIdOfArrayOrSlice&&elem.id!==typeNameIdOfTupleOrUnit){return row.id===elem.id||checkIfInList(row.generics,elem,whereClause,mgens)}}return unifyFunctionTypes([row],[elem],whereClause,mgens)}function checkPath(contains,ty){if(contains.length===0){return 0}const maxPathEditDistance=Math.floor(contains.reduce((acc,next)=>acc+next.length,0)/3);let ret_dist=maxPathEditDistance+1;const path=ty.path.split("::");if(ty.parent&&ty.parent.name){path.push(ty.parent.name.toLowerCase())}const length=path.length;const clength=contains.length;pathiter:for(let i=length-clength;i>=0;i-=1){let dist_total=0;for(let x=0;xmaxPathEditDistance){continue pathiter}dist_total+=dist}}ret_dist=Math.min(ret_dist,Math.round(dist_total/clength))}return ret_dist>maxPathEditDistance?null:ret_dist}function typePassesFilter(filter,type){if(filter<=NO_TYPE_FILTER||filter===type)return true;const name=itemTypes[type];switch(itemTypes[filter]){case"constant":return name==="associatedconstant";case"fn":return name==="method"||name==="tymethod";case"type":return name==="primitive"||name==="associatedtype";case"trait":return name==="traitalias"}return false}function createAliasFromItem(item){return{crate:item.crate,name:item.name,path:item.path,desc:item.desc,ty:item.ty,parent:item.parent,type:item.type,is_alias:true,deprecated:item.deprecated,implDisambiguator:item.implDisambiguator,}}function handleAliases(ret,query,filterCrates,currentCrate){const lowerQuery=query.toLowerCase();const aliases=[];const crateAliases=[];if(filterCrates!==null){if(ALIASES.has(filterCrates)&&ALIASES.get(filterCrates).has(lowerQuery)){const query_aliases=ALIASES.get(filterCrates).get(lowerQuery);for(const alias of query_aliases){aliases.push(createAliasFromItem(searchIndex[alias]))}}}else{for(const[crate,crateAliasesIndex]of ALIASES){if(crateAliasesIndex.has(lowerQuery)){const pushTo=crate===currentCrate?crateAliases:aliases;const query_aliases=crateAliasesIndex.get(lowerQuery);for(const alias of query_aliases){pushTo.push(createAliasFromItem(searchIndex[alias]))}}}}const sortFunc=(aaa,bbb)=>{if(aaa.path{alias.alias=query;const res=buildHrefAndPath(alias);alias.displayPath=pathSplitter(res[0]);alias.fullPath=alias.displayPath+alias.name;alias.href=res[1];ret.others.unshift(alias);if(ret.others.length>MAX_RESULTS){ret.others.pop()}};aliases.forEach(pushFunc);crateAliases.forEach(pushFunc)}function addIntoResults(results,fullId,id,index,dist,path_dist,maxEditDistance){if(dist<=maxEditDistance||index!==-1){if(results.has(fullId)){const result=results.get(fullId);if(result.dontValidate||result.dist<=dist){return}}results.set(fullId,{id:id,index:index,dontValidate:parsedQuery.literalSearch,dist:dist,path_dist:path_dist,})}}function handleSingleArg(row,pos,elem,results_others,results_in_args,results_returned,maxEditDistance){if(!row||(filterCrates!==null&&row.crate!==filterCrates)){return}let path_dist=0;const fullId=row.id;const tfpDist=compareTypeFingerprints(fullId,parsedQuery.typeFingerprint);if(tfpDist!==null){const in_args=row.type&&row.type.inputs&&checkIfInList(row.type.inputs,elem,row.type.where_clause);const returned=row.type&&row.type.output&&checkIfInList(row.type.output,elem,row.type.where_clause);if(in_args){results_in_args.max_dist=Math.max(results_in_args.max_dist||0,tfpDist);const maxDist=results_in_args.sizenormalizedIndex&&normalizedIndex!==-1)){index=normalizedIndex}if(elem.fullPath.length>1){path_dist=checkPath(elem.pathWithoutLast,row);if(path_dist===null){return}}if(parsedQuery.literalSearch){if(row.word===elem.pathLast){addIntoResults(results_others,fullId,pos,index,0,path_dist)}return}const dist=editDistance(row.normalizedName,elem.normalizedPathLast,maxEditDistance);if(index===-1&&dist>maxEditDistance){return}addIntoResults(results_others,fullId,pos,index,dist,path_dist,maxEditDistance)}function handleArgs(row,pos,results){if(!row||(filterCrates!==null&&row.crate!==filterCrates)||!row.type){return}const tfpDist=compareTypeFingerprints(row.id,parsedQuery.typeFingerprint);if(tfpDist===null){return}if(results.size>=MAX_RESULTS&&tfpDist>results.max_dist){return}if(!unifyFunctionTypes(row.type.inputs,parsedQuery.elems,row.type.where_clause,null,mgens=>{return unifyFunctionTypes(row.type.output,parsedQuery.returned,row.type.where_clause,mgens)})){return}results.max_dist=Math.max(results.max_dist||0,tfpDist);addIntoResults(results,row.id,pos,0,tfpDist,0,Number.MAX_VALUE)}function innerRunQuery(){const queryLen=parsedQuery.elems.reduce((acc,next)=>acc+next.pathLast.length,0)+parsedQuery.returned.reduce((acc,next)=>acc+next.pathLast.length,0);const maxEditDistance=Math.floor(queryLen/3);const genericSymbols=new Map();function convertNameToId(elem,isAssocType){if(typeNameIdMap.has(elem.normalizedPathLast)&&(isAssocType||!typeNameIdMap.get(elem.normalizedPathLast).assocOnly)){elem.id=typeNameIdMap.get(elem.normalizedPathLast).id}else if(!parsedQuery.literalSearch){let match=null;let matchDist=maxEditDistance+1;let matchName="";for(const[name,{id,assocOnly}]of typeNameIdMap){const dist=editDistance(name,elem.normalizedPathLast,maxEditDistance);if(dist<=matchDist&&dist<=maxEditDistance&&(isAssocType||!assocOnly)){if(dist===matchDist&&matchName>name){continue}match=id;matchDist=dist;matchName=name}}if(match!==null){parsedQuery.correction=matchName}elem.id=match}if((elem.id===null&&parsedQuery.totalElems>1&&elem.typeFilter===-1&&elem.generics.length===0&&elem.bindings.size===0)||elem.typeFilter===TY_GENERIC){if(genericSymbols.has(elem.name)){elem.id=genericSymbols.get(elem.name)}else{elem.id=-(genericSymbols.size+1);genericSymbols.set(elem.name,elem.id)}if(elem.typeFilter===-1&&elem.name.length>=3){const maxPartDistance=Math.floor(elem.name.length/3);let matchDist=maxPartDistance+1;let matchName="";for(const name of typeNameIdMap.keys()){const dist=editDistance(name,elem.name,maxPartDistance);if(dist<=matchDist&&dist<=maxPartDistance){if(dist===matchDist&&matchName>name){continue}matchDist=dist;matchName=name}}if(matchName!==""){parsedQuery.proposeCorrectionFrom=elem.name;parsedQuery.proposeCorrectionTo=matchName}}elem.typeFilter=TY_GENERIC}if(elem.generics.length>0&&elem.typeFilter===TY_GENERIC){parsedQuery.error=["Generic type parameter ",elem.name," does not accept generic parameters",]}for(const elem2 of elem.generics){convertNameToId(elem2)}elem.bindings=new Map(Array.from(elem.bindings.entries()).map(entry=>{const[name,constraints]=entry;if(!typeNameIdMap.has(name)){parsedQuery.error=["Type parameter ",name," does not exist",];return[null,[]]}for(const elem2 of constraints){convertNameToId(elem2)}return[typeNameIdMap.get(name).id,constraints]}))}const fps=new Set();for(const elem of parsedQuery.elems){convertNameToId(elem);buildFunctionTypeFingerprint(elem,parsedQuery.typeFingerprint,fps)}for(const elem of parsedQuery.returned){convertNameToId(elem);buildFunctionTypeFingerprint(elem,parsedQuery.typeFingerprint,fps)}if(parsedQuery.foundElems===1&&parsedQuery.returned.length===0){if(parsedQuery.elems.length===1){const elem=parsedQuery.elems[0];for(let i=0,nSearchIndex=searchIndex.length;i0){const sortQ=(a,b)=>{const ag=a.generics.length===0&&a.bindings.size===0;const bg=b.generics.length===0&&b.bindings.size===0;if(ag!==bg){return ag-bg}const ai=a.id>0;const bi=b.id>0;return ai-bi};parsedQuery.elems.sort(sortQ);parsedQuery.returned.sort(sortQ);for(let i=0,nSearchIndex=searchIndex.length;i");if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6)}return tmp}function addTab(array,query,display){const extraClass=display?" active":"";const output=document.createElement("div");if(array.length>0){output.className="search-results "+extraClass;array.forEach(item=>{const name=item.name;const type=itemTypes[item.ty];const longType=longItemTypes[item.ty];const typeName=longType.length!==0?`${longType}`:"?";const link=document.createElement("a");link.className="result-"+type;link.href=item.href;const resultName=document.createElement("div");resultName.className="result-name";resultName.insertAdjacentHTML("beforeend",`${typeName}`);link.appendChild(resultName);let alias=" ";if(item.is_alias){alias=`
\ +${item.alias} - see \ +
`}resultName.insertAdjacentHTML("beforeend",`
${alias}\ +${item.displayPath}${name}\ +
`);const description=document.createElement("div");description.className="desc";description.insertAdjacentHTML("beforeend",item.desc);link.appendChild(description);output.appendChild(link)})}else if(query.error===null){output.className="search-failed"+extraClass;output.innerHTML="No results :(
"+"Try on DuckDuckGo?

"+"Or try looking in one of these:"}return[output,array.length]}function makeTabHeader(tabNb,text,nbElems){const fmtNbElems=nbElems<10?`\u{2007}(${nbElems})\u{2007}\u{2007}`:nbElems<100?`\u{2007}(${nbElems})\u{2007}`:`\u{2007}(${nbElems})`;if(searchState.currentTab===tabNb){return""}return""}function showResults(results,go_to_first,filterCrates){const search=searchState.outputElement();if(go_to_first||(results.others.length===1&&getSettingValue("go-to-only-result")==="true")){window.onunload=()=>{};searchState.removeQueryParameters();const elem=document.createElement("a");elem.href=results.others[0].href;removeClass(elem,"active");document.body.appendChild(elem);elem.click();return}if(results.query===undefined){results.query=parseQuery(searchState.input.value)}currentResults=results.query.userQuery;const ret_others=addTab(results.others,results.query,true);const ret_in_args=addTab(results.in_args,results.query,false);const ret_returned=addTab(results.returned,results.query,false);let currentTab=searchState.currentTab;if((currentTab===0&&ret_others[1]===0)||(currentTab===1&&ret_in_args[1]===0)||(currentTab===2&&ret_returned[1]===0)){if(ret_others[1]!==0){currentTab=0}else if(ret_in_args[1]!==0){currentTab=1}else if(ret_returned[1]!==0){currentTab=2}}let crates="";if(rawSearchIndex.size>1){crates=" in 
"}let output=`

Results${crates}

`;if(results.query.error!==null){const error=results.query.error;error.forEach((value,index)=>{value=value.split("<").join("<").split(">").join(">");if(index%2!==0){error[index]=`${value.replaceAll(" ", " ")}`}else{error[index]=value}});output+=`

Query parser error: "${error.join("")}".

`;output+="
"+makeTabHeader(0,"In Names",ret_others[1])+"
";currentTab=0}else if(results.query.foundElems<=1&&results.query.returned.length===0){output+="
"+makeTabHeader(0,"In Names",ret_others[1])+makeTabHeader(1,"In Parameters",ret_in_args[1])+makeTabHeader(2,"In Return Types",ret_returned[1])+"
"}else{const signatureTabTitle=results.query.elems.length===0?"In Function Return Types":results.query.returned.length===0?"In Function Parameters":"In Function Signatures";output+="
"+makeTabHeader(0,signatureTabTitle,ret_others[1])+"
";currentTab=0}if(results.query.correction!==null){const orig=results.query.returned.length>0?results.query.returned[0].name:results.query.elems[0].name;output+="

"+`Type "${orig}" not found. `+"Showing results for closest type name "+`"${results.query.correction}" instead.

`}if(results.query.proposeCorrectionFrom!==null){const orig=results.query.proposeCorrectionFrom;const targ=results.query.proposeCorrectionTo;output+="

"+`Type "${orig}" not found and used as generic parameter. `+`Consider searching for "${targ}" instead.

`}const resultsElem=document.createElement("div");resultsElem.id="results";resultsElem.appendChild(ret_others[0]);resultsElem.appendChild(ret_in_args[0]);resultsElem.appendChild(ret_returned[0]);search.innerHTML=output;const crateSearch=document.getElementById("crate-search");if(crateSearch){crateSearch.addEventListener("input",updateCrate)}search.appendChild(resultsElem);searchState.showResults(search);const elems=document.getElementById("search-tabs").childNodes;searchState.focusedByTab=[];let i=0;for(const elem of elems){const j=i;elem.onclick=()=>printTab(j);searchState.focusedByTab.push(null);i+=1}printTab(currentTab)}function updateSearchHistory(url){if(!browserSupportsHistoryApi()){return}const params=searchState.getQueryStringParams();if(!history.state&&!params.search){history.pushState(null,"",url)}else{history.replaceState(null,"",url)}}function search(forced){const query=parseQuery(searchState.input.value.trim());let filterCrates=getFilterCrates();if(!forced&&query.userQuery===currentResults){if(query.userQuery.length>0){putBackSearch()}return}searchState.setLoadingSearch();const params=searchState.getQueryStringParams();if(filterCrates===null&¶ms["filter-crate"]!==undefined){filterCrates=params["filter-crate"]}searchState.title="Results for "+query.original+" - Rust";updateSearchHistory(buildUrl(query.original,filterCrates));showResults(execQuery(query,filterCrates,window.currentCrate),params.go_to_first,filterCrates)}function buildItemSearchTypeAll(types,lowercasePaths){return types.length>0?types.map(type=>buildItemSearchType(type,lowercasePaths)):EMPTY_GENERICS_ARRAY}const EMPTY_BINDINGS_MAP=new Map();const EMPTY_GENERICS_ARRAY=[];let TYPES_POOL=new Map();function buildItemSearchType(type,lowercasePaths,isAssocType){const PATH_INDEX_DATA=0;const GENERICS_DATA=1;const BINDINGS_DATA=2;let pathIndex,generics,bindings;if(typeof type==="number"){pathIndex=type;generics=EMPTY_GENERICS_ARRAY;bindings=EMPTY_BINDINGS_MAP}else{pathIndex=type[PATH_INDEX_DATA];generics=buildItemSearchTypeAll(type[GENERICS_DATA],lowercasePaths);if(type.length>BINDINGS_DATA&&type[BINDINGS_DATA].length>0){bindings=new Map(type[BINDINGS_DATA].map(binding=>{const[assocType,constraints]=binding;return[buildItemSearchType(assocType,lowercasePaths,true).id,buildItemSearchTypeAll(constraints,lowercasePaths),]}))}else{bindings=EMPTY_BINDINGS_MAP}}let result;if(pathIndex<0){result={id:pathIndex,ty:TY_GENERIC,path:null,generics,bindings,}}else if(pathIndex===0){result={id:null,ty:null,path:null,generics,bindings,}}else{const item=lowercasePaths[pathIndex-1];result={id:buildTypeMapIndex(item.name,isAssocType),ty:item.ty,path:item.path,generics,bindings,}}const cr=TYPES_POOL.get(result.id);if(cr){if(cr.generics.length===result.generics.length&&cr.generics!==result.generics&&cr.generics.every((x,i)=>result.generics[i]===x)){result.generics=cr.generics}if(cr.bindings.size===result.bindings.size&&cr.bindings!==result.bindings){let ok=true;for(const[k,v]of cr.bindings.entries()){const v2=result.bindings.get(v);if(!v2){ok=false;break}if(v!==v2&&v.length===v2.length&&v.every((x,i)=>v2[i]===x)){result.bindings.set(k,v)}else if(v!==v2){ok=false;break}}if(ok){result.bindings=cr.bindings}}if(cr.ty===result.ty&&cr.path===result.path&&cr.bindings===result.bindings&&cr.generics===result.generics&&cr.ty===result.ty){return cr}}TYPES_POOL.set(result.id,result);return result}function buildFunctionSearchType(itemFunctionDecoder,lowercasePaths){const c=itemFunctionDecoder.string.charCodeAt(itemFunctionDecoder.offset);itemFunctionDecoder.offset+=1;const[zero,ua,la,ob,cb]=["0","@","`","{","}"].map(c=>c.charCodeAt(0));if(c===la){return null}if(c>=zero&&c>1];itemFunctionDecoder.offset+=1;return sign?-value:value}const functionSearchType=decodeList();const INPUTS_DATA=0;const OUTPUT_DATA=1;let inputs,output;if(typeof functionSearchType[INPUTS_DATA]==="number"){inputs=[buildItemSearchType(functionSearchType[INPUTS_DATA],lowercasePaths)]}else{inputs=buildItemSearchTypeAll(functionSearchType[INPUTS_DATA],lowercasePaths)}if(functionSearchType.length>1){if(typeof functionSearchType[OUTPUT_DATA]==="number"){output=[buildItemSearchType(functionSearchType[OUTPUT_DATA],lowercasePaths)]}else{output=buildItemSearchTypeAll(functionSearchType[OUTPUT_DATA],lowercasePaths)}}else{output=[]}const where_clause=[];const l=functionSearchType.length;for(let i=2;i16){itemFunctionDecoder.backrefQueue.pop()}return ret}function buildFunctionTypeFingerprint(type,output,fps){let input=type.id;if(input===typeNameIdOfArray||input===typeNameIdOfSlice){input=typeNameIdOfArrayOrSlice}if(input===typeNameIdOfTuple||input===typeNameIdOfUnit){input=typeNameIdOfTupleOrUnit}const hashint1=k=>{k=(~~k+0x7ed55d16)+(k<<12);k=(k ^ 0xc761c23c)^(k>>>19);k=(~~k+0x165667b1)+(k<<5);k=(~~k+0xd3a2646c)^(k<<9);k=(~~k+0xfd7046c5)+(k<<3);return(k ^ 0xb55a4f09)^(k>>>16)};const hashint2=k=>{k=~k+(k<<15);k ^=k>>>12;k+=k<<2;k ^=k>>>4;k=Math.imul(k,2057);return k ^(k>>16)};if(input!==null){const h0a=hashint1(input);const h0b=hashint2(input);const h1a=~~(h0a+Math.imul(h0b,2));const h1b=~~(h0a+Math.imul(h0b,3));const h2a=~~(h0a+Math.imul(h0b,4));const h2b=~~(h0a+Math.imul(h0b,5));output[0]|=(1<<(h0a%32))|(1<<(h1b%32));output[1]|=(1<<(h1a%32))|(1<<(h2b%32));output[2]|=(1<<(h2a%32))|(1<<(h0b%32));fps.add(input)}for(const g of type.generics){buildFunctionTypeFingerprint(g,output,fps)}const fb={id:null,ty:0,generics:EMPTY_GENERICS_ARRAY,bindings:EMPTY_BINDINGS_MAP,};for(const[k,v]of type.bindings.entries()){fb.id=k;fb.generics=v;buildFunctionTypeFingerprint(fb,output,fps)}output[3]=fps.size}function compareTypeFingerprints(fullId,queryFingerprint){const fh0=functionTypeFingerprint[fullId*4];const fh1=functionTypeFingerprint[(fullId*4)+1];const fh2=functionTypeFingerprint[(fullId*4)+2];const[qh0,qh1,qh2]=queryFingerprint;const[in0,in1,in2]=[fh0&qh0,fh1&qh1,fh2&qh2];if((in0 ^ qh0)||(in1 ^ qh1)||(in2 ^ qh2)){return null}return functionTypeFingerprint[(fullId*4)+3]}function buildIndex(rawSearchIndex){searchIndex=[];typeNameIdMap=new Map();const charA="A".charCodeAt(0);let currentIndex=0;let id=0;typeNameIdOfArray=buildTypeMapIndex("array");typeNameIdOfSlice=buildTypeMapIndex("slice");typeNameIdOfTuple=buildTypeMapIndex("tuple");typeNameIdOfUnit=buildTypeMapIndex("unit");typeNameIdOfArrayOrSlice=buildTypeMapIndex("[]");typeNameIdOfTupleOrUnit=buildTypeMapIndex("()");for(const crate of rawSearchIndex.values()){id+=crate.t.length+1}functionTypeFingerprint=new Uint32Array((id+1)*4);id=0;for(const[crate,crateCorpus]of rawSearchIndex){const crateRow={crate:crate,ty:3,name:crate,path:"",desc:crateCorpus.doc,parent:undefined,type:null,id:id,word:crate,normalizedName:crate.indexOf("_")===-1?crate:crate.replace(/_/g,""),deprecated:null,implDisambiguator:null,};id+=1;searchIndex.push(crateRow);currentIndex+=1;const itemTypes=crateCorpus.t;const itemNames=crateCorpus.n;const itemPaths=new Map(crateCorpus.q);const itemDescs=crateCorpus.d;const itemParentIdxs=crateCorpus.i;const itemFunctionDecoder={string:crateCorpus.f,offset:0,backrefQueue:[],};const deprecatedItems=new Set(crateCorpus.c);const implDisambiguator=new Map(crateCorpus.b);const paths=crateCorpus.p;const aliases=crateCorpus.a;const lowercasePaths=[];let len=paths.length;let lastPath=itemPaths.get(0);for(let i=0;i2){path=itemPaths.has(elem[2])?itemPaths.get(elem[2]):lastPath;lastPath=path}lowercasePaths.push({ty:ty,name:name.toLowerCase(),path:path});paths[i]={ty:ty,name:name,path:path}}lastPath="";len=itemTypes.length;for(let i=0;i0?paths[itemParentIdxs[i]-1]:undefined,type,id:id,word,normalizedName:word.indexOf("_")===-1?word:word.replace(/_/g,""),deprecated:deprecatedItems.has(i),implDisambiguator:implDisambiguator.has(i)?implDisambiguator.get(i):null,};id+=1;searchIndex.push(row);lastPath=row.path}if(aliases){const currentCrateAliases=new Map();ALIASES.set(crate,currentCrateAliases);for(const alias_name in aliases){if(!Object.prototype.hasOwnProperty.call(aliases,alias_name)){continue}let currentNameAliases;if(currentCrateAliases.has(alias_name)){currentNameAliases=currentCrateAliases.get(alias_name)}else{currentNameAliases=[];currentCrateAliases.set(alias_name,currentNameAliases)}for(const local_alias of aliases[alias_name]){currentNameAliases.push(local_alias+currentIndex)}}}currentIndex+=itemTypes.length}TYPES_POOL=new Map()}function onSearchSubmit(e){e.preventDefault();searchState.clearInputTimeout();search()}function putBackSearch(){const search_input=searchState.input;if(!searchState.input){return}if(search_input.value!==""&&!searchState.isDisplayed()){searchState.showResults();if(browserSupportsHistoryApi()){history.replaceState(null,"",buildUrl(search_input.value,getFilterCrates()))}document.title=searchState.title}}function registerSearchEvents(){const params=searchState.getQueryStringParams();if(searchState.input.value===""){searchState.input.value=params.search||""}const searchAfter500ms=()=>{searchState.clearInputTimeout();if(searchState.input.value.length===0){searchState.hideResults()}else{searchState.timeout=setTimeout(search,500)}};searchState.input.onkeyup=searchAfter500ms;searchState.input.oninput=searchAfter500ms;document.getElementsByClassName("search-form")[0].onsubmit=onSearchSubmit;searchState.input.onchange=e=>{if(e.target!==document.activeElement){return}searchState.clearInputTimeout();setTimeout(search,0)};searchState.input.onpaste=searchState.input.onchange;searchState.outputElement().addEventListener("keydown",e=>{if(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey){return}if(e.which===38){const previous=document.activeElement.previousElementSibling;if(previous){previous.focus()}else{searchState.focus()}e.preventDefault()}else if(e.which===40){const next=document.activeElement.nextElementSibling;if(next){next.focus()}const rect=document.activeElement.getBoundingClientRect();if(window.innerHeight-rect.bottom{if(e.which===40){focusSearchResult();e.preventDefault()}});searchState.input.addEventListener("focus",()=>{putBackSearch()});searchState.input.addEventListener("blur",()=>{searchState.input.placeholder=searchState.input.origPlaceholder});if(browserSupportsHistoryApi()){const previousTitle=document.title;window.addEventListener("popstate",e=>{const params=searchState.getQueryStringParams();document.title=previousTitle;currentResults=null;if(params.search&¶ms.search.length>0){searchState.input.value=params.search;e.preventDefault();search()}else{searchState.input.value="";searchState.hideResults()}})}window.onpageshow=()=>{const qSearch=searchState.getQueryStringParams().search;if(searchState.input.value===""&&qSearch){searchState.input.value=qSearch}search()}}function updateCrate(ev){if(ev.target.value==="all crates"){const query=searchState.input.value.trim();updateSearchHistory(buildUrl(query,null))}currentResults=null;search(true)}buildIndex(rawSearchIndex);if(typeof window!=="undefined"){registerSearchEvents();if(window.searchState.getQueryStringParams().search){search()}}if(typeof exports!=="undefined"){exports.initSearch=initSearch;exports.execQuery=execQuery;exports.parseQuery=parseQuery}}if(typeof window!=="undefined"){window.initSearch=initSearch;if(window.searchIndex!==undefined){initSearch(window.searchIndex)}}else{initSearch(new Map())}})() \ No newline at end of file diff --git a/static.files/search-f6292fe389d70017.js b/static.files/search-f6292fe389d70017.js deleted file mode 100644 index c91355a6..00000000 --- a/static.files/search-f6292fe389d70017.js +++ /dev/null @@ -1,5 +0,0 @@ -"use strict";(function(){const itemTypes=["mod","externcrate","import","struct","enum","fn","type","static","trait","impl","tymethod","method","structfield","variant","macro","primitive","associatedtype","constant","associatedconstant","union","foreigntype","keyword","existential","attr","derive","traitalias",];const longItemTypes=["module","extern crate","re-export","struct","enum","function","type alias","static","trait","","trait method","method","struct field","enum variant","macro","primitive type","assoc type","constant","assoc const","union","foreign type","keyword","existential type","attribute macro","derive macro","trait alias",];const TY_PRIMITIVE=itemTypes.indexOf("primitive");const TY_KEYWORD=itemTypes.indexOf("keyword");const ROOT_PATH=typeof window!=="undefined"?window.rootPath:"../";function hasOwnPropertyRustdoc(obj,property){return Object.prototype.hasOwnProperty.call(obj,property)}function printTab(nb){let iter=0;let foundCurrentTab=false;let foundCurrentResultSet=false;onEachLazy(document.getElementById("search-tabs").childNodes,elem=>{if(nb===iter){addClass(elem,"selected");foundCurrentTab=true}else{removeClass(elem,"selected")}iter+=1});const isTypeSearch=(nb>0||iter===1);iter=0;onEachLazy(document.getElementById("results").childNodes,elem=>{if(nb===iter){addClass(elem,"active");foundCurrentResultSet=true}else{removeClass(elem,"active")}iter+=1});if(foundCurrentTab&&foundCurrentResultSet){searchState.currentTab=nb;const correctionsElem=document.getElementsByClassName("search-corrections");if(isTypeSearch){removeClass(correctionsElem[0],"hidden")}else{addClass(correctionsElem[0],"hidden")}}else if(nb!==0){printTab(0)}}const editDistanceState={current:[],prev:[],prevPrev:[],calculate:function calculate(a,b,limit){if(a.lengthlimit){return limit+1}while(b.length>0&&b[0]===a[0]){a=a.substring(1);b=b.substring(1)}while(b.length>0&&b[b.length-1]===a[a.length-1]){a=a.substring(0,a.length-1);b=b.substring(0,b.length-1)}if(b.length===0){return minDist}const aLength=a.length;const bLength=b.length;for(let i=0;i<=bLength;++i){this.current[i]=0;this.prev[i]=i;this.prevPrev[i]=Number.MAX_VALUE}for(let i=1;i<=aLength;++i){this.current[0]=i;const aIdx=i-1;for(let j=1;j<=bLength;++j){const bIdx=j-1;const substitutionCost=a[aIdx]===b[bIdx]?0:1;this.current[j]=Math.min(this.prev[j]+1,this.current[j-1]+1,this.prev[j-1]+substitutionCost);if((i>1)&&(j>1)&&(a[aIdx]===b[bIdx-1])&&(a[aIdx-1]===b[bIdx])){this.current[j]=Math.min(this.current[j],this.prevPrev[j-2]+1)}}const prevPrevTmp=this.prevPrev;this.prevPrev=this.prev;this.prev=this.current;this.current=prevPrevTmp}const distance=this.prev[bLength];return distance<=limit?distance:(limit+1)},};function editDistance(a,b,limit){return editDistanceState.calculate(a,b,limit)}function initSearch(rawSearchIndex){const MAX_RESULTS=200;const NO_TYPE_FILTER=-1;let searchIndex;let currentResults;let typeNameIdMap;const ALIASES=new Map();let typeNameIdOfArray;let typeNameIdOfSlice;let typeNameIdOfArrayOrSlice;function buildTypeMapIndex(name){if(name===""||name===null){return-1}if(typeNameIdMap.has(name)){return typeNameIdMap.get(name)}else{const id=typeNameIdMap.size;typeNameIdMap.set(name,id);return id}}function isWhitespace(c){return" \t\n\r".indexOf(c)!==-1}function isSpecialStartCharacter(c){return"<\"".indexOf(c)!==-1}function isEndCharacter(c){return",>-]".indexOf(c)!==-1}function isStopCharacter(c){return isEndCharacter(c)}function isErrorCharacter(c){return"()".indexOf(c)!==-1}function itemTypeFromName(typename){const index=itemTypes.findIndex(i=>i===typename);if(index<0){throw["Unknown type filter ",typename]}return index}function getStringElem(query,parserState,isInGenerics){if(isInGenerics){throw["Unexpected ","\""," in generics"]}else if(query.literalSearch){throw["Cannot have more than one literal search element"]}else if(parserState.totalElems-parserState.genericsElems>0){throw["Cannot use literal search when there is more than one element"]}parserState.pos+=1;const start=parserState.pos;const end=getIdentEndPosition(parserState);if(parserState.pos>=parserState.length){throw["Unclosed ","\""]}else if(parserState.userQuery[end]!=="\""){throw["Unexpected ",parserState.userQuery[end]," in a string element"]}else if(start===end){throw["Cannot have empty string element"]}parserState.pos+=1;query.literalSearch=true}function isPathStart(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="::"}function isReturnArrow(parserState){return parserState.userQuery.slice(parserState.pos,parserState.pos+2)==="->"}function isIdentCharacter(c){return(c==="_"||(c>="0"&&c<="9")||(c>="a"&&c<="z")||(c>="A"&&c<="Z"))}function isSeparatorCharacter(c){return c===","}function isPathSeparator(c){return c===":"||isWhitespace(c)}function prevIs(parserState,lookingFor){let pos=parserState.pos;while(pos>0){const c=parserState.userQuery[pos-1];if(c===lookingFor){return true}else if(!isWhitespace(c)){break}pos-=1}return false}function isLastElemGeneric(elems,parserState){return(elems.length>0&&elems[elems.length-1].generics.length>0)||prevIs(parserState,">")}function skipWhitespace(parserState){while(parserState.pos0){throw["Cannot have more than one element if you use quotes"]}const typeFilter=parserState.typeFilter;parserState.typeFilter=null;if(name==="!"){if(typeFilter!==null&&typeFilter!=="primitive"){throw["Invalid search type: primitive never type ","!"," and ",typeFilter," both specified",]}if(generics.length!==0){throw["Never type ","!"," does not accept generic parameters",]}return{name:"never",id:-1,fullPath:["never"],pathWithoutLast:[],pathLast:"never",generics:[],typeFilter:"primitive",}}if(path.startsWith("::")){throw["Paths cannot start with ","::"]}else if(path.endsWith("::")){throw["Paths cannot end with ","::"]}else if(path.includes("::::")){throw["Unexpected ","::::"]}else if(path.includes(" ::")){throw["Unexpected "," ::"]}else if(path.includes(":: ")){throw["Unexpected ",":: "]}const pathSegments=path.split(/::|\s+/);if(pathSegments.length===0||(pathSegments.length===1&&pathSegments[0]==="")){if(generics.length>0||prevIs(parserState,">")){throw["Found generics without a path"]}else{throw["Unexpected ",parserState.userQuery[parserState.pos]]}}for(const[i,pathSegment]of pathSegments.entries()){if(pathSegment==="!"){if(i!==0){throw["Never type ","!"," is not associated item"]}pathSegments[i]="never"}}parserState.totalElems+=1;if(isInGenerics){parserState.genericsElems+=1}return{name:name.trim(),id:-1,fullPath:pathSegments,pathWithoutLast:pathSegments.slice(0,pathSegments.length-1),pathLast:pathSegments[pathSegments.length-1],generics:generics,typeFilter,}}function getIdentEndPosition(parserState){const start=parserState.pos;let end=parserState.pos;let foundExclamation=-1;while(parserState.pos=end){throw["Found generics without a path"]}parserState.pos+=1;getItemsBefore(query,parserState,generics,">")}if(isStringElem){skipWhitespace(parserState)}if(start>=end&&generics.length===0){return}elems.push(createQueryElement(query,parserState,parserState.userQuery.slice(start,end),generics,isInGenerics))}}function getItemsBefore(query,parserState,elems,endChar){let foundStopChar=true;let start=parserState.pos;const oldTypeFilter=parserState.typeFilter;parserState.typeFilter=null;let extra="";if(endChar===">"){extra="<"}else if(endChar==="]"){extra="["}else if(endChar===""){extra="->"}else{extra=endChar}while(parserState.pos"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(endChar!==""){throw["Expected ",","," or ",endChar,...extra,", found ",c,]}throw["Expected ",",",...extra,", found ",c,]}const posBefore=parserState.pos;start=parserState.pos;getNextElem(query,parserState,elems,endChar!=="");if(endChar!==""&&parserState.pos>=parserState.length){throw["Unclosed ",extra]}if(posBefore===parserState.pos){parserState.pos+=1}foundStopChar=false}if(parserState.pos>=parserState.length&&endChar!==""){throw["Unclosed ",extra]}parserState.pos+=1;parserState.typeFilter=oldTypeFilter}function checkExtraTypeFilterCharacters(start,parserState){const query=parserState.userQuery.slice(start,parserState.pos).trim();for(const c in query){if(!isIdentCharacter(query[c])){throw["Unexpected ",query[c]," in type filter (before ",":",")",]}}}function parseInput(query,parserState){let foundStopChar=true;let start=parserState.pos;while(parserState.pos"){if(isReturnArrow(parserState)){break}throw["Unexpected ",c," (did you mean ","->","?)"]}throw["Unexpected ",c]}else if(c===":"&&!isPathStart(parserState)){if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}else if(query.elems.length===0){throw["Expected type filter before ",":"]}else if(query.literalSearch){throw["Cannot use quotes on type filter"]}const typeFilterElem=query.elems.pop();checkExtraTypeFilterCharacters(start,parserState);parserState.typeFilter=typeFilterElem.name;parserState.pos+=1;parserState.totalElems-=1;query.literalSearch=false;foundStopChar=true;continue}else if(isWhitespace(c)){skipWhitespace(parserState);continue}if(!foundStopChar){let extra="";if(isLastElemGeneric(query.elems,parserState)){extra=[" after ",">"]}else if(prevIs(parserState,"\"")){throw["Cannot have more than one element if you use quotes"]}if(parserState.typeFilter!==null){throw["Expected ",","," or ","->",...extra,", found ",c,]}throw["Expected ",",",", ",":"," or ","->",...extra,", found ",c,]}const before=query.elems.length;start=parserState.pos;getNextElem(query,parserState,query.elems,false);if(query.elems.length===before){parserState.pos+=1}foundStopChar=false}if(parserState.typeFilter!==null){throw["Unexpected ",":"," (expected path after type filter ",parserState.typeFilter+":",")",]}while(parserState.pos"]}break}else{parserState.pos+=1}}}function newParsedQuery(userQuery){return{original:userQuery,userQuery:userQuery.toLowerCase(),elems:[],returned:[],foundElems:0,literalSearch:false,error:null,correction:null,}}function buildUrl(search,filterCrates){let extra="?search="+encodeURIComponent(search);if(filterCrates!==null){extra+="&filter-crate="+encodeURIComponent(filterCrates)}return getNakedUrl()+extra+window.location.hash}function getFilterCrates(){const elem=document.getElementById("crate-search");if(elem&&elem.value!=="all crates"&&hasOwnPropertyRustdoc(rawSearchIndex,elem.value)){return elem.value}return null}function parseQuery(userQuery){function convertTypeFilterOnElem(elem){if(elem.typeFilter!==null){let typeFilter=elem.typeFilter;if(typeFilter==="const"){typeFilter="constant"}elem.typeFilter=itemTypeFromName(typeFilter)}else{elem.typeFilter=NO_TYPE_FILTER}for(const elem2 of elem.generics){convertTypeFilterOnElem(elem2)}}userQuery=userQuery.trim();const parserState={length:userQuery.length,pos:0,totalElems:0,genericsElems:0,typeFilter:null,userQuery:userQuery.toLowerCase(),};let query=newParsedQuery(userQuery);try{parseInput(query,parserState);for(const elem of query.elems){convertTypeFilterOnElem(elem)}for(const elem of query.returned){convertTypeFilterOnElem(elem)}}catch(err){query=newParsedQuery(userQuery);query.error=err;return query}if(!query.literalSearch){query.literalSearch=parserState.totalElems>1}query.foundElems=query.elems.length+query.returned.length;return query}function createQueryResults(results_in_args,results_returned,results_others,parsedQuery){return{"in_args":results_in_args,"returned":results_returned,"others":results_others,"query":parsedQuery,}}function execQuery(parsedQuery,searchWords,filterCrates,currentCrate){const results_others=new Map(),results_in_args=new Map(),results_returned=new Map();function transformResults(results){const duplicates=new Set();const out=[];for(const result of results){if(result.id>-1){const obj=searchIndex[result.id];obj.dist=result.dist;const res=buildHrefAndPath(obj);obj.displayPath=pathSplitter(res[0]);obj.fullPath=obj.displayPath+obj.name;obj.fullPath+="|"+obj.ty;if(duplicates.has(obj.fullPath)){continue}duplicates.add(obj.fullPath);obj.href=res[1];out.push(obj);if(out.length>=MAX_RESULTS){break}}}return out}function sortResults(results,isType,preferredCrate){if(results.size===0){return[]}const userQuery=parsedQuery.userQuery;const result_list=[];for(const result of results.values()){result.word=searchWords[result.id];result.item=searchIndex[result.id]||{};result_list.push(result)}result_list.sort((aaa,bbb)=>{let a,b;a=(aaa.word!==userQuery);b=(bbb.word!==userQuery);if(a!==b){return a-b}a=(aaa.index<0);b=(bbb.index<0);if(a!==b){return a-b}a=aaa.path_dist;b=bbb.path_dist;if(a!==b){return a-b}a=aaa.index;b=bbb.index;if(a!==b){return a-b}a=(aaa.dist);b=(bbb.dist);if(a!==b){return a-b}a=aaa.item.deprecated;b=bbb.item.deprecated;if(a!==b){return a-b}a=(aaa.item.crate!==preferredCrate);b=(bbb.item.crate!==preferredCrate);if(a!==b){return a-b}a=aaa.word.length;b=bbb.word.length;if(a!==b){return a-b}a=aaa.word;b=bbb.word;if(a!==b){return(a>b?+1:-1)}if((aaa.item.ty===TY_PRIMITIVE&&bbb.item.ty!==TY_KEYWORD)||(aaa.item.ty===TY_KEYWORD&&bbb.item.ty!==TY_PRIMITIVE)){return-1}if((bbb.item.ty===TY_PRIMITIVE&&aaa.item.ty!==TY_PRIMITIVE)||(bbb.item.ty===TY_KEYWORD&&aaa.item.ty!==TY_KEYWORD)){return 1}a=(aaa.item.desc==="");b=(bbb.item.desc==="");if(a!==b){return a-b}a=aaa.item.ty;b=bbb.item.ty;if(a!==b){return a-b}a=aaa.item.path;b=bbb.item.path;if(a!==b){return(a>b?+1:-1)}return 0});let nameSplit=null;if(parsedQuery.elems.length===1){const hasPath=typeof parsedQuery.elems[0].path==="undefined";nameSplit=hasPath?null:parsedQuery.elems[0].path}for(const result of result_list){if(result.dontValidate){continue}const name=result.item.name.toLowerCase(),path=result.item.path.toLowerCase(),parent=result.item.parent;if(!isType&&!validateResult(name,path,nameSplit,parent)){result.id=-1}}return transformResults(result_list)}function checkGenerics(fnType,queryElem){return unifyFunctionTypes(fnType.generics,queryElem.generics)}function unifyFunctionTypes(fnTypes,queryElems){if(queryElems.length===0){return true}if(!fnTypes||fnTypes.length===0){return false}const queryElemSet=new Map();const addQueryElemToQueryElemSet=function addQueryElemToQueryElemSet(queryElem){let currentQueryElemList;if(queryElemSet.has(queryElem.id)){currentQueryElemList=queryElemSet.get(queryElem.id)}else{currentQueryElemList=[];queryElemSet.set(queryElem.id,currentQueryElemList)}currentQueryElemList.push(queryElem)};for(const queryElem of queryElems){addQueryElemToQueryElemSet(queryElem)}const fnTypeSet=new Map();const addFnTypeToFnTypeSet=function addFnTypeToFnTypeSet(fnType){const queryContainsArrayOrSliceElem=queryElemSet.has(typeNameIdOfArrayOrSlice);if(fnType.id===-1||!(queryElemSet.has(fnType.id)||(fnType.id===typeNameIdOfSlice&&queryContainsArrayOrSliceElem)||(fnType.id===typeNameIdOfArray&&queryContainsArrayOrSliceElem))){for(const innerFnType of fnType.generics){addFnTypeToFnTypeSet(innerFnType)}return}let currentQueryElemList=queryElemSet.get(fnType.id)||[];let matchIdx=currentQueryElemList.findIndex(queryElem=>{return typePassesFilter(queryElem.typeFilter,fnType.ty)&&checkGenerics(fnType,queryElem)});if(matchIdx===-1&&(fnType.id===typeNameIdOfSlice||fnType.id===typeNameIdOfArray)&&queryContainsArrayOrSliceElem){currentQueryElemList=queryElemSet.get(typeNameIdOfArrayOrSlice)||[];matchIdx=currentQueryElemList.findIndex(queryElem=>{return typePassesFilter(queryElem.typeFilter,fnType.ty)&&checkGenerics(fnType,queryElem)})}if(matchIdx===-1){for(const innerFnType of fnType.generics){addFnTypeToFnTypeSet(innerFnType)}return}let currentFnTypeList;if(fnTypeSet.has(fnType.id)){currentFnTypeList=fnTypeSet.get(fnType.id)}else{currentFnTypeList=[];fnTypeSet.set(fnType.id,currentFnTypeList)}currentFnTypeList.push(fnType)};for(const fnType of fnTypes){addFnTypeToFnTypeSet(fnType)}const doHandleQueryElemList=(currentFnTypeList,queryElemList)=>{if(queryElemList.length===0){return true}const queryElem=queryElemList.pop();const l=currentFnTypeList.length;for(let i=0;i{if(!fnTypeSet.has(id)){if(id===typeNameIdOfArrayOrSlice){return handleQueryElemList(typeNameIdOfSlice,queryElemList)||handleQueryElemList(typeNameIdOfArray,queryElemList)}return false}const currentFnTypeList=fnTypeSet.get(id);if(currentFnTypeList.length0?checkIfInList(row.generics,elem):false}const matchesExact=row.id===elem.id;const matchesArrayOrSlice=elem.id===typeNameIdOfArrayOrSlice&&(row.id===typeNameIdOfSlice||row.id===typeNameIdOfArray);if((matchesExact||matchesArrayOrSlice)&&typePassesFilter(elem.typeFilter,row.ty)){if(elem.generics.length>0){return checkGenerics(row,elem)}return true}return checkIfInList(row.generics,elem)}function checkPath(contains,ty,maxEditDistance){if(contains.length===0){return 0}let ret_dist=maxEditDistance+1;const path=ty.path.split("::");if(ty.parent&&ty.parent.name){path.push(ty.parent.name.toLowerCase())}const length=path.length;const clength=contains.length;if(clength>length){return maxEditDistance+1}for(let i=0;ilength){break}let dist_total=0;let aborted=false;for(let x=0;xmaxEditDistance){aborted=true;break}dist_total+=dist}if(!aborted){ret_dist=Math.min(ret_dist,Math.round(dist_total/clength))}}return ret_dist}function typePassesFilter(filter,type){if(filter<=NO_TYPE_FILTER||filter===type)return true;const name=itemTypes[type];switch(itemTypes[filter]){case"constant":return name==="associatedconstant";case"fn":return name==="method"||name==="tymethod";case"type":return name==="primitive"||name==="associatedtype";case"trait":return name==="traitalias"}return false}function createAliasFromItem(item){return{crate:item.crate,name:item.name,path:item.path,desc:item.desc,ty:item.ty,parent:item.parent,type:item.type,is_alias:true,deprecated:item.deprecated,}}function handleAliases(ret,query,filterCrates,currentCrate){const lowerQuery=query.toLowerCase();const aliases=[];const crateAliases=[];if(filterCrates!==null){if(ALIASES.has(filterCrates)&&ALIASES.get(filterCrates).has(lowerQuery)){const query_aliases=ALIASES.get(filterCrates).get(lowerQuery);for(const alias of query_aliases){aliases.push(createAliasFromItem(searchIndex[alias]))}}}else{for(const[crate,crateAliasesIndex]of ALIASES){if(crateAliasesIndex.has(lowerQuery)){const pushTo=crate===currentCrate?crateAliases:aliases;const query_aliases=crateAliasesIndex.get(lowerQuery);for(const alias of query_aliases){pushTo.push(createAliasFromItem(searchIndex[alias]))}}}}const sortFunc=(aaa,bbb)=>{if(aaa.path{alias.alias=query;const res=buildHrefAndPath(alias);alias.displayPath=pathSplitter(res[0]);alias.fullPath=alias.displayPath+alias.name;alias.href=res[1];ret.others.unshift(alias);if(ret.others.length>MAX_RESULTS){ret.others.pop()}};aliases.forEach(pushFunc);crateAliases.forEach(pushFunc)}function addIntoResults(results,fullId,id,index,dist,path_dist,maxEditDistance){const inBounds=dist<=maxEditDistance||index!==-1;if(dist===0||(!parsedQuery.literalSearch&&inBounds)){if(results.has(fullId)){const result=results.get(fullId);if(result.dontValidate||result.dist<=dist){return}}results.set(fullId,{id:id,index:index,dontValidate:parsedQuery.literalSearch,dist:dist,path_dist:path_dist,})}}function handleSingleArg(row,pos,elem,results_others,results_in_args,results_returned,maxEditDistance){if(!row||(filterCrates!==null&&row.crate!==filterCrates)){return}let index=-1,path_dist=0;const fullId=row.id;const searchWord=searchWords[pos];const in_args=row.type&&row.type.inputs&&checkIfInList(row.type.inputs,elem);if(in_args){addIntoResults(results_in_args,fullId,pos,-1,0,0,maxEditDistance)}const returned=row.type&&row.type.output&&checkIfInList(row.type.output,elem);if(returned){addIntoResults(results_returned,fullId,pos,-1,0,0,maxEditDistance)}if(!typePassesFilter(elem.typeFilter,row.ty)){return}const row_index=row.normalizedName.indexOf(elem.pathLast);const word_index=searchWord.indexOf(elem.pathLast);if(row_index===-1){index=word_index}else if(word_index===-1){index=row_index}else if(word_index1){path_dist=checkPath(elem.pathWithoutLast,row,maxEditDistance);if(path_dist>maxEditDistance){return}}if(parsedQuery.literalSearch){if(searchWord===elem.name){addIntoResults(results_others,fullId,pos,index,0,path_dist)}return}const dist=editDistance(searchWord,elem.pathLast,maxEditDistance);if(index===-1&&dist+path_dist>maxEditDistance){return}addIntoResults(results_others,fullId,pos,index,dist,path_dist,maxEditDistance)}function handleArgs(row,pos,results){if(!row||(filterCrates!==null&&row.crate!==filterCrates)||!row.type){return}if(!unifyFunctionTypes(row.type.inputs,parsedQuery.elems)){return}if(!unifyFunctionTypes(row.type.output,parsedQuery.returned)){return}addIntoResults(results,row.id,pos,0,0,0,Number.MAX_VALUE)}function innerRunQuery(){let elem,i,nSearchWords,in_returned,row;let queryLen=0;for(const elem of parsedQuery.elems){queryLen+=elem.name.length}for(const elem of parsedQuery.returned){queryLen+=elem.name.length}const maxEditDistance=Math.floor(queryLen/3);function convertNameToId(elem){if(typeNameIdMap.has(elem.name)){elem.id=typeNameIdMap.get(elem.name)}else if(!parsedQuery.literalSearch){let match=-1;let matchDist=maxEditDistance+1;let matchName="";for(const[name,id]of typeNameIdMap){const dist=editDistance(name,elem.name,maxEditDistance);if(dist<=matchDist&&dist<=maxEditDistance){if(dist===matchDist&&matchName>name){continue}match=id;matchDist=dist;matchName=name}}if(match!==-1){parsedQuery.correction=matchName}elem.id=match}for(const elem2 of elem.generics){convertNameToId(elem2)}}for(const elem of parsedQuery.elems){convertNameToId(elem)}for(const elem of parsedQuery.returned){convertNameToId(elem)}if(parsedQuery.foundElems===1){if(parsedQuery.elems.length===1){elem=parsedQuery.elems[0];for(i=0,nSearchWords=searchWords.length;i0){for(i=0,nSearchWords=searchWords.length;i-1||path.indexOf(key)>-1||(parent!==undefined&&parent.name!==undefined&&parent.name.toLowerCase().indexOf(key)>-1)||editDistance(name,key,maxEditDistance)<=maxEditDistance)){return false}}return true}function nextTab(direction){const next=(searchState.currentTab+direction+3)%searchState.focusedByTab.length;searchState.focusedByTab[searchState.currentTab]=document.activeElement;printTab(next);focusSearchResult()}function focusSearchResult(){const target=searchState.focusedByTab[searchState.currentTab]||document.querySelectorAll(".search-results.active a").item(0)||document.querySelectorAll("#search-tabs button").item(searchState.currentTab);searchState.focusedByTab[searchState.currentTab]=null;if(target){target.focus()}}function buildHrefAndPath(item){let displayPath;let href;const type=itemTypes[item.ty];const name=item.name;let path=item.path;if(type==="mod"){displayPath=path+"::";href=ROOT_PATH+path.replace(/::/g,"/")+"/"+name+"/index.html"}else if(type==="import"){displayPath=item.path+"::";href=ROOT_PATH+item.path.replace(/::/g,"/")+"/index.html#reexport."+name}else if(type==="primitive"||type==="keyword"){displayPath="";href=ROOT_PATH+path.replace(/::/g,"/")+"/"+type+"."+name+".html"}else if(type==="externcrate"){displayPath="";href=ROOT_PATH+name+"/index.html"}else if(item.parent!==undefined){const myparent=item.parent;let anchor="#"+type+"."+name;const parentType=itemTypes[myparent.ty];let pageType=parentType;let pageName=myparent.name;if(parentType==="primitive"){displayPath=myparent.name+"::"}else if(type==="structfield"&&parentType==="variant"){const enumNameIdx=item.path.lastIndexOf("::");const enumName=item.path.substr(enumNameIdx+2);path=item.path.substr(0,enumNameIdx);displayPath=path+"::"+enumName+"::"+myparent.name+"::";anchor="#variant."+myparent.name+".field."+name;pageType="enum";pageName=enumName}else{displayPath=path+"::"+myparent.name+"::"}href=ROOT_PATH+path.replace(/::/g,"/")+"/"+pageType+"."+pageName+".html"+anchor}else{displayPath=item.path+"::";href=ROOT_PATH+item.path.replace(/::/g,"/")+"/"+type+"."+name+".html"}return[displayPath,href]}function pathSplitter(path){const tmp=""+path.replace(/::/g,"::");if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6)}return tmp}function addTab(array,query,display){let extraClass="";if(display===true){extraClass=" active"}const output=document.createElement("div");let length=0;if(array.length>0){output.className="search-results "+extraClass;array.forEach(item=>{const name=item.name;const type=itemTypes[item.ty];const longType=longItemTypes[item.ty];const typeName=longType.length!==0?`${longType}`:"?";length+=1;const link=document.createElement("a");link.className="result-"+type;link.href=item.href;const resultName=document.createElement("div");resultName.className="result-name";if(item.is_alias){const alias=document.createElement("span");alias.className="alias";const bold=document.createElement("b");bold.innerText=item.alias;alias.appendChild(bold);alias.insertAdjacentHTML("beforeend"," - see ");resultName.appendChild(alias)}resultName.insertAdjacentHTML("beforeend",`\ -${typeName}\ -
\ - ${item.displayPath}${name}\ -
`);link.appendChild(resultName);const description=document.createElement("div");description.className="desc";description.insertAdjacentHTML("beforeend",item.desc);link.appendChild(description);output.appendChild(link)})}else if(query.error===null){output.className="search-failed"+extraClass;output.innerHTML="No results :(
"+"Try on DuckDuckGo?

"+"Or try looking in one of these:"}return[output,length]}function makeTabHeader(tabNb,text,nbElems){if(searchState.currentTab===tabNb){return""}return""}function showResults(results,go_to_first,filterCrates){const search=searchState.outputElement();if(go_to_first||(results.others.length===1&&getSettingValue("go-to-only-result")==="true")){window.onunload=()=>{};searchState.removeQueryParameters();const elem=document.createElement("a");elem.href=results.others[0].href;removeClass(elem,"active");document.body.appendChild(elem);elem.click();return}if(results.query===undefined){results.query=parseQuery(searchState.input.value)}currentResults=results.query.userQuery;const ret_others=addTab(results.others,results.query,true);const ret_in_args=addTab(results.in_args,results.query,false);const ret_returned=addTab(results.returned,results.query,false);let currentTab=searchState.currentTab;if((currentTab===0&&ret_others[1]===0)||(currentTab===1&&ret_in_args[1]===0)||(currentTab===2&&ret_returned[1]===0)){if(ret_others[1]!==0){currentTab=0}else if(ret_in_args[1]!==0){currentTab=1}else if(ret_returned[1]!==0){currentTab=2}}let crates="";const crates_list=Object.keys(rawSearchIndex);if(crates_list.length>1){crates=" in 
"}let output=`

Results${crates}

`;if(results.query.error!==null){const error=results.query.error;error.forEach((value,index)=>{value=value.split("<").join("<").split(">").join(">");if(index%2!==0){error[index]=`${value.replaceAll(" ", " ")}`}else{error[index]=value}});output+=`

Query parser error: "${error.join("")}".

`;output+="
"+makeTabHeader(0,"In Names",ret_others[1])+"
";currentTab=0}else if(results.query.foundElems<=1&&results.query.returned.length===0){output+="
"+makeTabHeader(0,"In Names",ret_others[1])+makeTabHeader(1,"In Parameters",ret_in_args[1])+makeTabHeader(2,"In Return Types",ret_returned[1])+"
"}else{const signatureTabTitle=results.query.elems.length===0?"In Function Return Types":results.query.returned.length===0?"In Function Parameters":"In Function Signatures";output+="
"+makeTabHeader(0,signatureTabTitle,ret_others[1])+"
";currentTab=0}if(results.query.correction!==null){const orig=results.query.returned.length>0?results.query.returned[0].name:results.query.elems[0].name;output+="

"+`Type "${orig}" not found. `+"Showing results for closest type name "+`"${results.query.correction}" instead.

`}const resultsElem=document.createElement("div");resultsElem.id="results";resultsElem.appendChild(ret_others[0]);resultsElem.appendChild(ret_in_args[0]);resultsElem.appendChild(ret_returned[0]);search.innerHTML=output;const crateSearch=document.getElementById("crate-search");if(crateSearch){crateSearch.addEventListener("input",updateCrate)}search.appendChild(resultsElem);searchState.showResults(search);const elems=document.getElementById("search-tabs").childNodes;searchState.focusedByTab=[];let i=0;for(const elem of elems){const j=i;elem.onclick=()=>printTab(j);searchState.focusedByTab.push(null);i+=1}printTab(currentTab)}function updateSearchHistory(url){if(!browserSupportsHistoryApi()){return}const params=searchState.getQueryStringParams();if(!history.state&&!params.search){history.pushState(null,"",url)}else{history.replaceState(null,"",url)}}function search(e,forced){if(e){e.preventDefault()}const query=parseQuery(searchState.input.value.trim());let filterCrates=getFilterCrates();if(!forced&&query.userQuery===currentResults){if(query.userQuery.length>0){putBackSearch()}return}searchState.setLoadingSearch();const params=searchState.getQueryStringParams();if(filterCrates===null&¶ms["filter-crate"]!==undefined){filterCrates=params["filter-crate"]}searchState.title="Results for "+query.original+" - Rust";updateSearchHistory(buildUrl(query.original,filterCrates));showResults(execQuery(query,searchWords,filterCrates,window.currentCrate),params.go_to_first,filterCrates)}function buildItemSearchTypeAll(types,lowercasePaths){const PATH_INDEX_DATA=0;const GENERICS_DATA=1;return types.map(type=>{let pathIndex,generics;if(typeof type==="number"){pathIndex=type;generics=[]}else{pathIndex=type[PATH_INDEX_DATA];generics=buildItemSearchTypeAll(type[GENERICS_DATA],lowercasePaths)}return{id:pathIndex===0?-1:buildTypeMapIndex(lowercasePaths[pathIndex-1].name),ty:pathIndex===0?null:lowercasePaths[pathIndex-1].ty,generics:generics,}})}function buildFunctionSearchType(functionSearchType,lowercasePaths){const INPUTS_DATA=0;const OUTPUT_DATA=1;if(functionSearchType===0){return null}let inputs,output;if(typeof functionSearchType[INPUTS_DATA]==="number"){const pathIndex=functionSearchType[INPUTS_DATA];inputs=[{id:pathIndex===0?-1:buildTypeMapIndex(lowercasePaths[pathIndex-1].name),ty:pathIndex===0?null:lowercasePaths[pathIndex-1].ty,generics:[],}]}else{inputs=buildItemSearchTypeAll(functionSearchType[INPUTS_DATA],lowercasePaths)}if(functionSearchType.length>1){if(typeof functionSearchType[OUTPUT_DATA]==="number"){const pathIndex=functionSearchType[OUTPUT_DATA];output=[{id:pathIndex===0?-1:buildTypeMapIndex(lowercasePaths[pathIndex-1].name),ty:pathIndex===0?null:lowercasePaths[pathIndex-1].ty,generics:[],}]}else{output=buildItemSearchTypeAll(functionSearchType[OUTPUT_DATA],lowercasePaths)}}else{output=[]}return{inputs,output,}}function buildIndex(rawSearchIndex){searchIndex=[];const searchWords=[];typeNameIdMap=new Map();const charA="A".charCodeAt(0);let currentIndex=0;let id=0;typeNameIdOfArray=buildTypeMapIndex("array");typeNameIdOfSlice=buildTypeMapIndex("slice");typeNameIdOfArrayOrSlice=buildTypeMapIndex("[]");for(const crate in rawSearchIndex){if(!hasOwnPropertyRustdoc(rawSearchIndex,crate)){continue}let crateSize=0;const crateCorpus=rawSearchIndex[crate];searchWords.push(crate);const crateRow={crate:crate,ty:1,name:crate,path:"",desc:crateCorpus.doc,parent:undefined,type:null,id:id,normalizedName:crate.indexOf("_")===-1?crate:crate.replace(/_/g,""),deprecated:null,};id+=1;searchIndex.push(crateRow);currentIndex+=1;const itemTypes=crateCorpus.t;const itemNames=crateCorpus.n;const itemPaths=new Map(crateCorpus.q);const itemDescs=crateCorpus.d;const itemParentIdxs=crateCorpus.i;const itemFunctionSearchTypes=crateCorpus.f;const deprecatedItems=new Set(crateCorpus.c);const paths=crateCorpus.p;const aliases=crateCorpus.a;const lowercasePaths=[];let len=paths.length;for(let i=0;i0?paths[itemParentIdxs[i]-1]:undefined,type:buildFunctionSearchType(itemFunctionSearchTypes[i],lowercasePaths),id:id,normalizedName:word.indexOf("_")===-1?word:word.replace(/_/g,""),deprecated:deprecatedItems.has(i),};id+=1;searchIndex.push(row);lastPath=row.path;crateSize+=1}if(aliases){const currentCrateAliases=new Map();ALIASES.set(crate,currentCrateAliases);for(const alias_name in aliases){if(!hasOwnPropertyRustdoc(aliases,alias_name)){continue}let currentNameAliases;if(currentCrateAliases.has(alias_name)){currentNameAliases=currentCrateAliases.get(alias_name)}else{currentNameAliases=[];currentCrateAliases.set(alias_name,currentNameAliases)}for(const local_alias of aliases[alias_name]){currentNameAliases.push(local_alias+currentIndex)}}}currentIndex+=crateSize}return searchWords}function onSearchSubmit(e){e.preventDefault();searchState.clearInputTimeout();search()}function putBackSearch(){const search_input=searchState.input;if(!searchState.input){return}if(search_input.value!==""&&!searchState.isDisplayed()){searchState.showResults();if(browserSupportsHistoryApi()){history.replaceState(null,"",buildUrl(search_input.value,getFilterCrates()))}document.title=searchState.title}}function registerSearchEvents(){const params=searchState.getQueryStringParams();if(searchState.input.value===""){searchState.input.value=params.search||""}const searchAfter500ms=()=>{searchState.clearInputTimeout();if(searchState.input.value.length===0){searchState.hideResults()}else{searchState.timeout=setTimeout(search,500)}};searchState.input.onkeyup=searchAfter500ms;searchState.input.oninput=searchAfter500ms;document.getElementsByClassName("search-form")[0].onsubmit=onSearchSubmit;searchState.input.onchange=e=>{if(e.target!==document.activeElement){return}searchState.clearInputTimeout();setTimeout(search,0)};searchState.input.onpaste=searchState.input.onchange;searchState.outputElement().addEventListener("keydown",e=>{if(e.altKey||e.ctrlKey||e.shiftKey||e.metaKey){return}if(e.which===38){const previous=document.activeElement.previousElementSibling;if(previous){previous.focus()}else{searchState.focus()}e.preventDefault()}else if(e.which===40){const next=document.activeElement.nextElementSibling;if(next){next.focus()}const rect=document.activeElement.getBoundingClientRect();if(window.innerHeight-rect.bottom{if(e.which===40){focusSearchResult();e.preventDefault()}});searchState.input.addEventListener("focus",()=>{putBackSearch()});searchState.input.addEventListener("blur",()=>{searchState.input.placeholder=searchState.input.origPlaceholder});if(browserSupportsHistoryApi()){const previousTitle=document.title;window.addEventListener("popstate",e=>{const params=searchState.getQueryStringParams();document.title=previousTitle;currentResults=null;if(params.search&¶ms.search.length>0){searchState.input.value=params.search;search(e)}else{searchState.input.value="";searchState.hideResults()}})}window.onpageshow=()=>{const qSearch=searchState.getQueryStringParams().search;if(searchState.input.value===""&&qSearch){searchState.input.value=qSearch}search()}}function updateCrate(ev){if(ev.target.value==="all crates"){const query=searchState.input.value.trim();updateSearchHistory(buildUrl(query,null))}currentResults=null;search(undefined,true)}const searchWords=buildIndex(rawSearchIndex);if(typeof window!=="undefined"){registerSearchEvents();if(window.searchState.getQueryStringParams().search){search()}}if(typeof exports!=="undefined"){exports.initSearch=initSearch;exports.execQuery=execQuery;exports.parseQuery=parseQuery}return searchWords}if(typeof window!=="undefined"){window.initSearch=initSearch;if(window.searchIndex!==undefined){initSearch(window.searchIndex)}}else{initSearch({})}})() \ No newline at end of file diff --git a/static.files/settings-4313503d2e1961c2.js b/static.files/settings-4313503d2e1961c2.js new file mode 100644 index 00000000..ab425fe4 --- /dev/null +++ b/static.files/settings-4313503d2e1961c2.js @@ -0,0 +1,17 @@ +"use strict";(function(){const isSettingsPage=window.location.pathname.endsWith("/settings.html");function changeSetting(settingName,value){if(settingName==="theme"){const useSystem=value==="system preference"?"true":"false";updateLocalStorage("use-system-theme",useSystem)}updateLocalStorage(settingName,value);switch(settingName){case"theme":case"preferred-dark-theme":case"preferred-light-theme":updateTheme();updateLightAndDark();break;case"line-numbers":if(value===true){window.rustdoc_add_line_numbers_to_examples()}else{window.rustdoc_remove_line_numbers_from_examples()}break;case"hide-sidebar":if(value===true){addClass(document.documentElement,"hide-sidebar")}else{removeClass(document.documentElement,"hide-sidebar")}break}}function showLightAndDark(){removeClass(document.getElementById("preferred-light-theme"),"hidden");removeClass(document.getElementById("preferred-dark-theme"),"hidden")}function hideLightAndDark(){addClass(document.getElementById("preferred-light-theme"),"hidden");addClass(document.getElementById("preferred-dark-theme"),"hidden")}function updateLightAndDark(){const useSystem=getSettingValue("use-system-theme");if(useSystem==="true"||(useSystem===null&&getSettingValue("theme")===null)){showLightAndDark()}else{hideLightAndDark()}}function setEvents(settingsElement){updateLightAndDark();onEachLazy(settingsElement.querySelectorAll("input[type=\"checkbox\"]"),toggle=>{const settingId=toggle.id;const settingValue=getSettingValue(settingId);if(settingValue!==null){toggle.checked=settingValue==="true"}toggle.onchange=()=>{changeSetting(toggle.id,toggle.checked)}});onEachLazy(settingsElement.querySelectorAll("input[type=\"radio\"]"),elem=>{const settingId=elem.name;let settingValue=getSettingValue(settingId);if(settingId==="theme"){const useSystem=getSettingValue("use-system-theme");if(useSystem==="true"||settingValue===null){settingValue=useSystem==="false"?"light":"system preference"}}if(settingValue!==null&&settingValue!=="null"){elem.checked=settingValue===elem.value}elem.addEventListener("change",ev=>{changeSetting(ev.target.name,ev.target.value)})})}function buildSettingsPageSections(settings){let output="";for(const setting of settings){const js_data_name=setting["js_name"];const setting_name=setting["name"];if(setting["options"]!==undefined){output+=`\ +
+
${setting_name}
+
`;onEach(setting["options"],option=>{const checked=option===setting["default"]?" checked":"";const full=`${js_data_name}-${option.replace(/ /g,"-")}`;output+=`\ + `});output+=`\ +
+
`}else{const checked=setting["default"]===true?" checked":"";output+=`\ +
\ + \ +
`}}return output}function buildSettingsPage(){const theme_names=getVar("themes").split(",").filter(t=>t);theme_names.push("light","dark","ayu");const settings=[{"name":"Theme","js_name":"theme","default":"system preference","options":theme_names.concat("system preference"),},{"name":"Preferred light theme","js_name":"preferred-light-theme","default":"light","options":theme_names,},{"name":"Preferred dark theme","js_name":"preferred-dark-theme","default":"dark","options":theme_names,},{"name":"Auto-hide item contents for large items","js_name":"auto-hide-large-items","default":true,},{"name":"Auto-hide item methods' documentation","js_name":"auto-hide-method-docs","default":false,},{"name":"Auto-hide trait implementation documentation","js_name":"auto-hide-trait-implementations","default":false,},{"name":"Directly go to item in search if there is only one result","js_name":"go-to-only-result","default":false,},{"name":"Show line numbers on code examples","js_name":"line-numbers","default":false,},{"name":"Hide persistent navigation bar","js_name":"hide-sidebar","default":false,},{"name":"Disable keyboard shortcuts","js_name":"disable-shortcuts","default":false,},];const elementKind=isSettingsPage?"section":"div";const innerHTML=`
${buildSettingsPageSections(settings)}
`;const el=document.createElement(elementKind);el.id="settings";if(!isSettingsPage){el.className="popover"}el.innerHTML=innerHTML;if(isSettingsPage){document.getElementById(MAIN_ID).appendChild(el)}else{el.setAttribute("tabindex","-1");getSettingsButton().appendChild(el)}return el}const settingsMenu=buildSettingsPage();function displaySettings(){settingsMenu.style.display="";onEachLazy(settingsMenu.querySelectorAll("input[type='checkbox']"),el=>{const val=getSettingValue(el.id);const checked=val==="true";if(checked!==el.checked&&val!==null){el.checked=checked}})}function settingsBlurHandler(event){blurHandler(event,getSettingsButton(),window.hidePopoverMenus)}if(isSettingsPage){getSettingsButton().onclick=event=>{event.preventDefault()}}else{const settingsButton=getSettingsButton();const settingsMenu=document.getElementById("settings");settingsButton.onclick=event=>{if(settingsMenu.contains(event.target)){return}event.preventDefault();const shouldDisplaySettings=settingsMenu.style.display==="none";window.hideAllModals();if(shouldDisplaySettings){displaySettings()}};settingsButton.onblur=settingsBlurHandler;settingsButton.querySelector("a").onblur=settingsBlurHandler;onEachLazy(settingsMenu.querySelectorAll("input"),el=>{el.onblur=settingsBlurHandler});settingsMenu.onblur=settingsBlurHandler}setTimeout(()=>{setEvents(settingsMenu);if(!isSettingsPage){displaySettings()}removeClass(getSettingsButton(),"rotate")},0)})() \ No newline at end of file diff --git a/static.files/settings-8c76f75bfb6bd192.css b/static.files/settings-8c76f75bfb6bd192.css deleted file mode 100644 index 5241bb86..00000000 --- a/static.files/settings-8c76f75bfb6bd192.css +++ /dev/null @@ -1,3 +0,0 @@ -.setting-line{margin:1.2em 0.6em;}.setting-radio input,.setting-check input{margin-right:0.3em;height:1.2rem;width:1.2rem;border:2px solid var(--settings-input-border-color);outline:none;-webkit-appearance:none;cursor:pointer;}.setting-radio input{border-radius:50%;}.setting-radio span,.setting-check span{padding-bottom:1px;}.setting-radio{margin-top:0.1em;margin-bottom:0.1em;min-width:3.8em;padding:0.3em;display:inline-flex;align-items:center;cursor:pointer;}.setting-radio+.setting-radio{margin-left:0.5em;}.setting-check{margin-right:20px;display:flex;align-items:center;cursor:pointer;}.setting-radio input:checked{box-shadow:inset 0 0 0 3px var(--main-background-color);background-color:var(--settings-input-color);}.setting-check input:checked{background-color:var(--settings-input-color);border-width:1px;content:url('data:image/svg+xml,\ - \ - ');}.setting-radio input:focus,.setting-check input:focus{box-shadow:0 0 1px 1px var(--settings-input-color);}.setting-radio input:checked:focus{box-shadow:inset 0 0 0 3px var(--main-background-color),0 0 2px 2px var(--settings-input-color);}.setting-radio input:hover,.setting-check input:hover{border-color:var(--settings-input-color) !important;} \ No newline at end of file diff --git a/static.files/settings-de11bff964e9d4e5.js b/static.files/settings-de11bff964e9d4e5.js deleted file mode 100644 index cc508a86..00000000 --- a/static.files/settings-de11bff964e9d4e5.js +++ /dev/null @@ -1,17 +0,0 @@ -"use strict";(function(){const isSettingsPage=window.location.pathname.endsWith("/settings.html");function changeSetting(settingName,value){if(settingName==="theme"){const useSystem=value==="system preference"?"true":"false";updateLocalStorage("use-system-theme",useSystem)}updateLocalStorage(settingName,value);switch(settingName){case"theme":case"preferred-dark-theme":case"preferred-light-theme":updateTheme();updateLightAndDark();break;case"line-numbers":if(value===true){window.rustdoc_add_line_numbers_to_examples()}else{window.rustdoc_remove_line_numbers_from_examples()}break}}function showLightAndDark(){removeClass(document.getElementById("preferred-light-theme"),"hidden");removeClass(document.getElementById("preferred-dark-theme"),"hidden")}function hideLightAndDark(){addClass(document.getElementById("preferred-light-theme"),"hidden");addClass(document.getElementById("preferred-dark-theme"),"hidden")}function updateLightAndDark(){const useSystem=getSettingValue("use-system-theme");if(useSystem==="true"||(useSystem===null&&getSettingValue("theme")===null)){showLightAndDark()}else{hideLightAndDark()}}function setEvents(settingsElement){updateLightAndDark();onEachLazy(settingsElement.querySelectorAll("input[type=\"checkbox\"]"),toggle=>{const settingId=toggle.id;const settingValue=getSettingValue(settingId);if(settingValue!==null){toggle.checked=settingValue==="true"}toggle.onchange=function(){changeSetting(this.id,this.checked)}});onEachLazy(settingsElement.querySelectorAll("input[type=\"radio\"]"),elem=>{const settingId=elem.name;let settingValue=getSettingValue(settingId);if(settingId==="theme"){const useSystem=getSettingValue("use-system-theme");if(useSystem==="true"||settingValue===null){settingValue=useSystem==="false"?"light":"system preference"}}if(settingValue!==null&&settingValue!=="null"){elem.checked=settingValue===elem.value}elem.addEventListener("change",ev=>{changeSetting(ev.target.name,ev.target.value)})})}function buildSettingsPageSections(settings){let output="";for(const setting of settings){const js_data_name=setting["js_name"];const setting_name=setting["name"];if(setting["options"]!==undefined){output+=`\ -
-
${setting_name}
-
`;onEach(setting["options"],option=>{const checked=option===setting["default"]?" checked":"";const full=`${js_data_name}-${option.replace(/ /g,"-")}`;output+=`\ - `});output+=`\ -
-
`}else{const checked=setting["default"]===true?" checked":"";output+=`\ -
\ - \ -
`}}return output}function buildSettingsPage(){const theme_names=getVar("themes").split(",").filter(t=>t);theme_names.push("light","dark","ayu");const settings=[{"name":"Theme","js_name":"theme","default":"system preference","options":theme_names.concat("system preference"),},{"name":"Preferred light theme","js_name":"preferred-light-theme","default":"light","options":theme_names,},{"name":"Preferred dark theme","js_name":"preferred-dark-theme","default":"dark","options":theme_names,},{"name":"Auto-hide item contents for large items","js_name":"auto-hide-large-items","default":true,},{"name":"Auto-hide item methods' documentation","js_name":"auto-hide-method-docs","default":false,},{"name":"Auto-hide trait implementation documentation","js_name":"auto-hide-trait-implementations","default":false,},{"name":"Directly go to item in search if there is only one result","js_name":"go-to-only-result","default":false,},{"name":"Show line numbers on code examples","js_name":"line-numbers","default":false,},{"name":"Disable keyboard shortcuts","js_name":"disable-shortcuts","default":false,},];const elementKind=isSettingsPage?"section":"div";const innerHTML=`
${buildSettingsPageSections(settings)}
`;const el=document.createElement(elementKind);el.id="settings";if(!isSettingsPage){el.className="popover"}el.innerHTML=innerHTML;if(isSettingsPage){document.getElementById(MAIN_ID).appendChild(el)}else{el.setAttribute("tabindex","-1");getSettingsButton().appendChild(el)}return el}const settingsMenu=buildSettingsPage();function displaySettings(){settingsMenu.style.display=""}function settingsBlurHandler(event){blurHandler(event,getSettingsButton(),window.hidePopoverMenus)}if(isSettingsPage){getSettingsButton().onclick=function(event){event.preventDefault()}}else{const settingsButton=getSettingsButton();const settingsMenu=document.getElementById("settings");settingsButton.onclick=function(event){if(elemIsInParent(event.target,settingsMenu)){return}event.preventDefault();const shouldDisplaySettings=settingsMenu.style.display==="none";window.hideAllModals();if(shouldDisplaySettings){displaySettings()}};settingsButton.onblur=settingsBlurHandler;settingsButton.querySelector("a").onblur=settingsBlurHandler;onEachLazy(settingsMenu.querySelectorAll("input"),el=>{el.onblur=settingsBlurHandler});settingsMenu.onblur=settingsBlurHandler}setTimeout(()=>{setEvents(settingsMenu);if(!isSettingsPage){displaySettings()}removeClass(getSettingsButton(),"rotate")},0)})() \ No newline at end of file diff --git a/static.files/source-script-106908c7a7964ba4.js b/static.files/source-script-106908c7a7964ba4.js deleted file mode 100644 index 191bf6d9..00000000 --- a/static.files/source-script-106908c7a7964ba4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(function(){const rootPath=getVar("root-path");const NAME_OFFSET=0;const DIRS_OFFSET=1;const FILES_OFFSET=2;const RUSTDOC_MOBILE_BREAKPOINT=700;function closeSidebarIfMobile(){if(window.innerWidth"){addClass(document.documentElement,"source-sidebar-expanded");child.innerText="<";updateLocalStorage("source-sidebar-show","true")}else{removeClass(document.documentElement,"source-sidebar-expanded");child.innerText=">";updateLocalStorage("source-sidebar-show","false")}}function createSidebarToggle(){const sidebarToggle=document.createElement("div");sidebarToggle.id="src-sidebar-toggle";const inner=document.createElement("button");if(getCurrentValue("source-sidebar-show")==="true"){inner.innerText="<"}else{inner.innerText=">"}inner.onclick=toggleSidebar;sidebarToggle.appendChild(inner);return sidebarToggle}function createSourceSidebar(){const container=document.querySelector("nav.sidebar");const sidebarToggle=createSidebarToggle();container.insertBefore(sidebarToggle,container.firstChild);const sidebar=document.createElement("div");sidebar.id="source-sidebar";let hasFoundFile=false;const title=document.createElement("div");title.className="title";title.innerText="Files";sidebar.appendChild(title);Object.keys(sourcesIndex).forEach(key=>{sourcesIndex[key][NAME_OFFSET]=key;hasFoundFile=createDirEntry(sourcesIndex[key],sidebar,"",hasFoundFile)});container.appendChild(sidebar);const selected_elem=sidebar.getElementsByClassName("selected")[0];if(typeof selected_elem!=="undefined"){selected_elem.focus()}}const lineNumbersRegex=/^#?(\d+)(?:-(\d+))?$/;function highlightSourceLines(match){if(typeof match==="undefined"){match=window.location.hash.match(lineNumbersRegex)}if(!match){return}let from=parseInt(match[1],10);let to=from;if(typeof match[2]!=="undefined"){to=parseInt(match[2],10)}if(to{onEachLazy(e.getElementsByTagName("a"),i_e=>{removeClass(i_e,"line-highlighted")})});for(let i=from;i<=to;++i){elem=document.getElementById(i);if(!elem){break}addClass(elem,"line-highlighted")}}const handleSourceHighlight=(function(){let prev_line_id=0;const set_fragment=name=>{const x=window.scrollX,y=window.scrollY;if(browserSupportsHistoryApi()){history.replaceState(null,null,"#"+name);highlightSourceLines()}else{location.replace("#"+name)}window.scrollTo(x,y)};return ev=>{let cur_line_id=parseInt(ev.target.id,10);if(isNaN(cur_line_id)||ev.ctrlKey||ev.altKey||ev.metaKey){return}ev.preventDefault();if(ev.shiftKey&&prev_line_id){if(prev_line_id>cur_line_id){const tmp=prev_line_id;prev_line_id=cur_line_id;cur_line_id=tmp}set_fragment(prev_line_id+"-"+cur_line_id)}else{prev_line_id=cur_line_id;set_fragment(cur_line_id)}}}());window.addEventListener("hashchange",()=>{const match=window.location.hash.match(lineNumbersRegex);if(match){return highlightSourceLines(match)}});onEachLazy(document.getElementsByClassName("src-line-numbers"),el=>{el.addEventListener("click",handleSourceHighlight)});highlightSourceLines();window.createSourceSidebar=createSourceSidebar})() \ No newline at end of file diff --git a/static.files/src-script-e66d777a5a92e9b2.js b/static.files/src-script-e66d777a5a92e9b2.js new file mode 100644 index 00000000..d0aebb85 --- /dev/null +++ b/static.files/src-script-e66d777a5a92e9b2.js @@ -0,0 +1 @@ +"use strict";(function(){const rootPath=getVar("root-path");const NAME_OFFSET=0;const DIRS_OFFSET=1;const FILES_OFFSET=2;const RUSTDOC_MOBILE_BREAKPOINT=700;function closeSidebarIfMobile(){if(window.innerWidth{removeClass(document.documentElement,"src-sidebar-expanded");updateLocalStorage("source-sidebar-show","false")};window.rustdocShowSourceSidebar=()=>{addClass(document.documentElement,"src-sidebar-expanded");updateLocalStorage("source-sidebar-show","true")};window.rustdocToggleSrcSidebar=()=>{if(document.documentElement.classList.contains("src-sidebar-expanded")){window.rustdocCloseSourceSidebar()}else{window.rustdocShowSourceSidebar()}};function createSrcSidebar(){const container=document.querySelector("nav.sidebar");const sidebar=document.createElement("div");sidebar.id="src-sidebar";let hasFoundFile=false;for(const[key,source]of srcIndex){source[NAME_OFFSET]=key;hasFoundFile=createDirEntry(source,sidebar,"",hasFoundFile)}container.appendChild(sidebar);const selected_elem=sidebar.getElementsByClassName("selected")[0];if(typeof selected_elem!=="undefined"){selected_elem.focus()}}function highlightSrcLines(){const match=window.location.hash.match(/^#?(\d+)(?:-(\d+))?$/);if(!match){return}let from=parseInt(match[1],10);let to=from;if(typeof match[2]!=="undefined"){to=parseInt(match[2],10)}if(to{onEachLazy(e.getElementsByTagName("a"),i_e=>{removeClass(i_e,"line-highlighted")})});for(let i=from;i<=to;++i){elem=document.getElementById(i);if(!elem){break}addClass(elem,"line-highlighted")}}const handleSrcHighlight=(function(){let prev_line_id=0;const set_fragment=name=>{const x=window.scrollX,y=window.scrollY;if(browserSupportsHistoryApi()){history.replaceState(null,null,"#"+name);highlightSrcLines()}else{location.replace("#"+name)}window.scrollTo(x,y)};return ev=>{let cur_line_id=parseInt(ev.target.id,10);if(isNaN(cur_line_id)||ev.ctrlKey||ev.altKey||ev.metaKey){return}ev.preventDefault();if(ev.shiftKey&&prev_line_id){if(prev_line_id>cur_line_id){const tmp=prev_line_id;prev_line_id=cur_line_id;cur_line_id=tmp}set_fragment(prev_line_id+"-"+cur_line_id)}else{prev_line_id=cur_line_id;set_fragment(cur_line_id)}}}());window.addEventListener("hashchange",highlightSrcLines);onEachLazy(document.getElementsByClassName("src-line-numbers"),el=>{el.addEventListener("click",handleSrcHighlight)});highlightSrcLines();window.createSrcSidebar=createSrcSidebar})() \ No newline at end of file diff --git a/static.files/storage-4c98445ec4002617.js b/static.files/storage-4c98445ec4002617.js new file mode 100644 index 00000000..b378b856 --- /dev/null +++ b/static.files/storage-4c98445ec4002617.js @@ -0,0 +1 @@ +"use strict";const builtinThemes=["light","dark","ayu"];const darkThemes=["dark","ayu"];window.currentTheme=document.getElementById("themeStyle");const settingsDataset=(function(){const settingsElement=document.getElementById("default-settings");return settingsElement&&settingsElement.dataset?settingsElement.dataset:null})();function getSettingValue(settingName){const current=getCurrentValue(settingName);if(current===null&&settingsDataset!==null){const def=settingsDataset[settingName.replace(/-/g,"_")];if(def!==undefined){return def}}return current}const localStoredTheme=getSettingValue("theme");function hasClass(elem,className){return elem&&elem.classList&&elem.classList.contains(className)}function addClass(elem,className){if(elem&&elem.classList){elem.classList.add(className)}}function removeClass(elem,className){if(elem&&elem.classList){elem.classList.remove(className)}}function onEach(arr,func){for(const elem of arr){if(func(elem)){return true}}return false}function onEachLazy(lazyArray,func){return onEach(Array.prototype.slice.call(lazyArray),func)}function updateLocalStorage(name,value){try{window.localStorage.setItem("rustdoc-"+name,value)}catch(e){}}function getCurrentValue(name){try{return window.localStorage.getItem("rustdoc-"+name)}catch(e){return null}}const getVar=(function getVar(name){const el=document.querySelector("head > meta[name='rustdoc-vars']");return el?el.attributes["data-"+name].value:null});function switchTheme(newThemeName,saveTheme){const themeNames=getVar("themes").split(",").filter(t=>t);themeNames.push(...builtinThemes);if(themeNames.indexOf(newThemeName)===-1){return}if(saveTheme){updateLocalStorage("theme",newThemeName)}document.documentElement.setAttribute("data-theme",newThemeName);if(builtinThemes.indexOf(newThemeName)!==-1){if(window.currentTheme){window.currentTheme.parentNode.removeChild(window.currentTheme);window.currentTheme=null}}else{const newHref=getVar("root-path")+encodeURIComponent(newThemeName)+getVar("resource-suffix")+".css";if(!window.currentTheme){if(document.readyState==="loading"){document.write(``);window.currentTheme=document.getElementById("themeStyle")}else{window.currentTheme=document.createElement("link");window.currentTheme.rel="stylesheet";window.currentTheme.id="themeStyle";window.currentTheme.href=newHref;document.documentElement.appendChild(window.currentTheme)}}else if(newHref!==window.currentTheme.href){window.currentTheme.href=newHref}}}const updateTheme=(function(){const mql=window.matchMedia("(prefers-color-scheme: dark)");function updateTheme(){if(getSettingValue("use-system-theme")!=="false"){const lightTheme=getSettingValue("preferred-light-theme")||"light";const darkTheme=getSettingValue("preferred-dark-theme")||"dark";updateLocalStorage("use-system-theme","true");switchTheme(mql.matches?darkTheme:lightTheme,true)}else{switchTheme(getSettingValue("theme"),false)}}mql.addEventListener("change",updateTheme);return updateTheme})();if(getSettingValue("use-system-theme")!=="false"&&window.matchMedia){if(getSettingValue("use-system-theme")===null&&getSettingValue("preferred-dark-theme")===null&&darkThemes.indexOf(localStoredTheme)>=0){updateLocalStorage("preferred-dark-theme",localStoredTheme)}}updateTheme();if(getSettingValue("source-sidebar-show")==="true"){addClass(document.documentElement,"src-sidebar-expanded")}if(getSettingValue("hide-sidebar")==="true"){addClass(document.documentElement,"hide-sidebar")}function updateSidebarWidth(){const desktopSidebarWidth=getSettingValue("desktop-sidebar-width");if(desktopSidebarWidth&&desktopSidebarWidth!=="null"){document.documentElement.style.setProperty("--desktop-sidebar-width",desktopSidebarWidth+"px")}const srcSidebarWidth=getSettingValue("src-sidebar-width");if(srcSidebarWidth&&srcSidebarWidth!=="null"){document.documentElement.style.setProperty("--src-sidebar-width",srcSidebarWidth+"px")}}updateSidebarWidth();window.addEventListener("pageshow",ev=>{if(ev.persisted){setTimeout(updateTheme,0);setTimeout(updateSidebarWidth,0)}}) \ No newline at end of file diff --git a/static.files/storage-59fd9b8ccb335783.js b/static.files/storage-59fd9b8ccb335783.js deleted file mode 100644 index ca5481ac..00000000 --- a/static.files/storage-59fd9b8ccb335783.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";const darkThemes=["dark","ayu"];window.currentTheme=document.getElementById("themeStyle");const settingsDataset=(function(){const settingsElement=document.getElementById("default-settings");return settingsElement&&settingsElement.dataset?settingsElement.dataset:null})();function getSettingValue(settingName){const current=getCurrentValue(settingName);if(current===null&&settingsDataset!==null){const def=settingsDataset[settingName.replace(/-/g,"_")];if(def!==undefined){return def}}return current}const localStoredTheme=getSettingValue("theme");function hasClass(elem,className){return elem&&elem.classList&&elem.classList.contains(className)}function addClass(elem,className){if(elem&&elem.classList){elem.classList.add(className)}}function removeClass(elem,className){if(elem&&elem.classList){elem.classList.remove(className)}}function onEach(arr,func,reversed){if(arr&&arr.length>0){if(reversed){for(let i=arr.length-1;i>=0;--i){if(func(arr[i])){return true}}}else{for(const elem of arr){if(func(elem)){return true}}}}return false}function onEachLazy(lazyArray,func,reversed){return onEach(Array.prototype.slice.call(lazyArray),func,reversed)}function updateLocalStorage(name,value){try{window.localStorage.setItem("rustdoc-"+name,value)}catch(e){}}function getCurrentValue(name){try{return window.localStorage.getItem("rustdoc-"+name)}catch(e){return null}}const getVar=(function getVar(name){const el=document.querySelector("head > meta[name='rustdoc-vars']");return el?el.attributes["data-"+name].value:null});function switchTheme(newThemeName,saveTheme){if(saveTheme){updateLocalStorage("theme",newThemeName)}let newHref;if(newThemeName==="light"||newThemeName==="dark"||newThemeName==="ayu"){newHref=getVar("static-root-path")+getVar("theme-"+newThemeName+"-css")}else{newHref=getVar("root-path")+newThemeName+getVar("resource-suffix")+".css"}if(!window.currentTheme){document.write(``);window.currentTheme=document.getElementById("themeStyle")}else if(newHref!==window.currentTheme.href){window.currentTheme.href=newHref}}const updateTheme=(function(){const mql=window.matchMedia("(prefers-color-scheme: dark)");function updateTheme(){if(getSettingValue("use-system-theme")!=="false"){const lightTheme=getSettingValue("preferred-light-theme")||"light";const darkTheme=getSettingValue("preferred-dark-theme")||"dark";updateLocalStorage("use-system-theme","true");switchTheme(mql.matches?darkTheme:lightTheme,true)}else{switchTheme(getSettingValue("theme"),false)}}mql.addEventListener("change",updateTheme);return updateTheme})();if(getSettingValue("use-system-theme")!=="false"&&window.matchMedia){if(getSettingValue("use-system-theme")===null&&getSettingValue("preferred-dark-theme")===null&&darkThemes.indexOf(localStoredTheme)>=0){updateLocalStorage("preferred-dark-theme",localStoredTheme)}}updateTheme();if(getSettingValue("source-sidebar-show")==="true"){addClass(document.documentElement,"source-sidebar-expanded")}window.addEventListener("pageshow",ev=>{if(ev.persisted){setTimeout(updateTheme,0)}}) \ No newline at end of file diff --git a/trait.impl/core/clone/trait.Clone.js b/trait.impl/core/clone/trait.Clone.js new file mode 100644 index 00000000..95d5c12a --- /dev/null +++ b/trait.impl/core/clone/trait.Clone.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"echonet":[["impl Clone for PropertyEnum"],["impl Clone for Object"],["impl Clone for Message"],["impl Clone for Property"],["impl Clone for ESV"],["impl Clone for RemoteNode"],["impl Clone for Property"],["impl Clone for PropertyRule"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/trait.impl/core/cmp/trait.Eq.js b/trait.impl/core/cmp/trait.Eq.js new file mode 100644 index 00000000..b0803ed0 --- /dev/null +++ b/trait.impl/core/cmp/trait.Eq.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"echonet":[["impl Eq for Object"],["impl Eq for RemoteNode"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/trait.impl/core/cmp/trait.PartialEq.js b/trait.impl/core/cmp/trait.PartialEq.js new file mode 100644 index 00000000..5432a951 --- /dev/null +++ b/trait.impl/core/cmp/trait.PartialEq.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"echonet":[["impl PartialEq for RemoteNode"],["impl PartialEq for ESV"],["impl PartialEq for Object"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/convert/trait.From.js b/trait.impl/core/convert/trait.From.js similarity index 88% rename from implementors/core/convert/trait.From.js rename to trait.impl/core/convert/trait.From.js index e687050a..74faf032 100644 --- a/implementors/core/convert/trait.From.js +++ b/trait.impl/core/convert/trait.From.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"echonet":[["impl From<&Property> for Property"]] +"echonet":[["impl From<&Property> for Property"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/fmt/trait.Debug.js b/trait.impl/core/fmt/trait.Debug.js similarity index 85% rename from implementors/core/fmt/trait.Debug.js rename to trait.impl/core/fmt/trait.Debug.js index e29f19d1..5ab70995 100644 --- a/implementors/core/fmt/trait.Debug.js +++ b/trait.impl/core/fmt/trait.Debug.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"echonet":[["impl Debug for ESV"]] +"echonet":[["impl Debug for ESV"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/fmt/trait.Display.js b/trait.impl/core/fmt/trait.Display.js similarity index 81% rename from implementors/core/fmt/trait.Display.js rename to trait.impl/core/fmt/trait.Display.js index af080f97..22f42ee5 100644 --- a/implementors/core/fmt/trait.Display.js +++ b/trait.impl/core/fmt/trait.Display.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"echonet":[["impl Display for Message"],["impl Display for ESV"]] +"echonet":[["impl Display for Message"],["impl Display for ESV"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/trait.impl/core/hash/trait.Hash.js b/trait.impl/core/hash/trait.Hash.js new file mode 100644 index 00000000..afad1713 --- /dev/null +++ b/trait.impl/core/hash/trait.Hash.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"echonet":[["impl Hash for PropertyEnum"],["impl Hash for Property"],["impl Hash for RemoteNode"],["impl Hash for Object"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/trait.impl/core/marker/trait.Copy.js b/trait.impl/core/marker/trait.Copy.js new file mode 100644 index 00000000..eb78e070 --- /dev/null +++ b/trait.impl/core/marker/trait.Copy.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"echonet":[["impl Copy for PropertyRule"],["impl Copy for ESV"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/marker/trait.Freeze.js b/trait.impl/core/marker/trait.Freeze.js similarity index 100% rename from implementors/core/marker/trait.Freeze.js rename to trait.impl/core/marker/trait.Freeze.js diff --git a/implementors/core/marker/trait.Send.js b/trait.impl/core/marker/trait.Send.js similarity index 79% rename from implementors/core/marker/trait.Send.js rename to trait.impl/core/marker/trait.Send.js index 6d9232cc..e39a5998 100644 --- a/implementors/core/marker/trait.Send.js +++ b/trait.impl/core/marker/trait.Send.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"echonet":[["impl Send for Logger",1,["echonet::log::logger::Logger"]],["impl Send for ESV",1,["echonet::protocol::esv::ESV"]],["impl Send for Message",1,["echonet::protocol::message::Message"]],["impl Send for Property",1,["echonet::protocol::property::Property"]],["impl Send for Manager",1,["echonet::transport::manager::Manager"]],["impl Send for NotifytManager",1,["echonet::transport::notify_manager::NotifytManager"]],["impl Send for Bytes",1,["echonet::util::bytes::Bytes"]],["impl Send for OID",1,["echonet::util::oid::OID"]],["impl Send for Controller",1,["echonet::controller::Controller"]],["impl Send for StandardDatabase",1,["echonet::database::StandardDatabase"]],["impl Send for Device",1,["echonet::device::Device"]],["impl Send for Manufacture",1,["echonet::manufacture::Manufacture"]],["impl Send for Node",1,["echonet::node::Node"]],["impl Send for Object",1,["echonet::object::Object"]],["impl Send for PropertyRule",1,["echonet::property::PropertyRule"]],["impl Send for PropertyEnum",1,["echonet::property::PropertyEnum"]],["impl Send for Property",1,["echonet::property::Property"]],["impl Send for RemoteNode",1,["echonet::remote_node::RemoteNode"]]] +"echonet":[["impl Send for Logger",1,["echonet::log::logger::Logger"]],["impl Send for ESV",1,["echonet::protocol::esv::ESV"]],["impl Send for Message",1,["echonet::protocol::message::Message"]],["impl Send for Property",1,["echonet::protocol::property::Property"]],["impl Send for Manager",1,["echonet::transport::manager::Manager"]],["impl Send for NotifytManager",1,["echonet::transport::notify_manager::NotifytManager"]],["impl Send for Bytes",1,["echonet::util::bytes::Bytes"]],["impl Send for OID",1,["echonet::util::oid::OID"]],["impl Send for Controller",1,["echonet::controller::Controller"]],["impl Send for StandardDatabase",1,["echonet::database::StandardDatabase"]],["impl Send for Device",1,["echonet::device::Device"]],["impl Send for Manufacture",1,["echonet::manufacture::Manufacture"]],["impl Send for Node",1,["echonet::node::Node"]],["impl Send for Object",1,["echonet::object::Object"]],["impl Send for PropertyRule",1,["echonet::property::PropertyRule"]],["impl Send for PropertyEnum",1,["echonet::property::PropertyEnum"]],["impl Send for Property",1,["echonet::property::Property"]],["impl Send for RemoteNode",1,["echonet::remote_node::RemoteNode"]]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/marker/trait.StructuralPartialEq.js b/trait.impl/core/marker/trait.StructuralPartialEq.js similarity index 86% rename from implementors/core/marker/trait.StructuralPartialEq.js rename to trait.impl/core/marker/trait.StructuralPartialEq.js index 333202bb..7d55dcca 100644 --- a/implementors/core/marker/trait.StructuralPartialEq.js +++ b/trait.impl/core/marker/trait.StructuralPartialEq.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"echonet":[["impl StructuralPartialEq for ESV"]] +"echonet":[["impl StructuralPartialEq for ESV"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/marker/trait.Sync.js b/trait.impl/core/marker/trait.Sync.js similarity index 79% rename from implementors/core/marker/trait.Sync.js rename to trait.impl/core/marker/trait.Sync.js index 957c390c..f05d1616 100644 --- a/implementors/core/marker/trait.Sync.js +++ b/trait.impl/core/marker/trait.Sync.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"echonet":[["impl Sync for Logger",1,["echonet::log::logger::Logger"]],["impl Sync for ESV",1,["echonet::protocol::esv::ESV"]],["impl Sync for Message",1,["echonet::protocol::message::Message"]],["impl Sync for Property",1,["echonet::protocol::property::Property"]],["impl Sync for Manager",1,["echonet::transport::manager::Manager"]],["impl Sync for NotifytManager",1,["echonet::transport::notify_manager::NotifytManager"]],["impl Sync for Bytes",1,["echonet::util::bytes::Bytes"]],["impl Sync for OID",1,["echonet::util::oid::OID"]],["impl Sync for Controller",1,["echonet::controller::Controller"]],["impl Sync for StandardDatabase",1,["echonet::database::StandardDatabase"]],["impl Sync for Device",1,["echonet::device::Device"]],["impl Sync for Manufacture",1,["echonet::manufacture::Manufacture"]],["impl Sync for Node",1,["echonet::node::Node"]],["impl Sync for Object",1,["echonet::object::Object"]],["impl Sync for PropertyRule",1,["echonet::property::PropertyRule"]],["impl Sync for PropertyEnum",1,["echonet::property::PropertyEnum"]],["impl Sync for Property",1,["echonet::property::Property"]],["impl Sync for RemoteNode",1,["echonet::remote_node::RemoteNode"]]] +"echonet":[["impl Sync for Logger",1,["echonet::log::logger::Logger"]],["impl Sync for ESV",1,["echonet::protocol::esv::ESV"]],["impl Sync for Message",1,["echonet::protocol::message::Message"]],["impl Sync for Property",1,["echonet::protocol::property::Property"]],["impl Sync for Manager",1,["echonet::transport::manager::Manager"]],["impl Sync for NotifytManager",1,["echonet::transport::notify_manager::NotifytManager"]],["impl Sync for Bytes",1,["echonet::util::bytes::Bytes"]],["impl Sync for OID",1,["echonet::util::oid::OID"]],["impl Sync for Controller",1,["echonet::controller::Controller"]],["impl Sync for StandardDatabase",1,["echonet::database::StandardDatabase"]],["impl Sync for Device",1,["echonet::device::Device"]],["impl Sync for Manufacture",1,["echonet::manufacture::Manufacture"]],["impl Sync for Node",1,["echonet::node::Node"]],["impl Sync for Object",1,["echonet::object::Object"]],["impl Sync for PropertyRule",1,["echonet::property::PropertyRule"]],["impl Sync for PropertyEnum",1,["echonet::property::PropertyEnum"]],["impl Sync for Property",1,["echonet::property::Property"]],["impl Sync for RemoteNode",1,["echonet::remote_node::RemoteNode"]]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/marker/trait.Unpin.js b/trait.impl/core/marker/trait.Unpin.js similarity index 79% rename from implementors/core/marker/trait.Unpin.js rename to trait.impl/core/marker/trait.Unpin.js index c4a658e2..785d536a 100644 --- a/implementors/core/marker/trait.Unpin.js +++ b/trait.impl/core/marker/trait.Unpin.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"echonet":[["impl Unpin for Logger",1,["echonet::log::logger::Logger"]],["impl Unpin for ESV",1,["echonet::protocol::esv::ESV"]],["impl Unpin for Message",1,["echonet::protocol::message::Message"]],["impl Unpin for Property",1,["echonet::protocol::property::Property"]],["impl Unpin for Manager",1,["echonet::transport::manager::Manager"]],["impl Unpin for NotifytManager",1,["echonet::transport::notify_manager::NotifytManager"]],["impl Unpin for Bytes",1,["echonet::util::bytes::Bytes"]],["impl Unpin for OID",1,["echonet::util::oid::OID"]],["impl Unpin for Controller",1,["echonet::controller::Controller"]],["impl Unpin for StandardDatabase",1,["echonet::database::StandardDatabase"]],["impl Unpin for Device",1,["echonet::device::Device"]],["impl Unpin for Manufacture",1,["echonet::manufacture::Manufacture"]],["impl Unpin for Node",1,["echonet::node::Node"]],["impl Unpin for Object",1,["echonet::object::Object"]],["impl Unpin for PropertyRule",1,["echonet::property::PropertyRule"]],["impl Unpin for PropertyEnum",1,["echonet::property::PropertyEnum"]],["impl Unpin for Property",1,["echonet::property::Property"]],["impl Unpin for RemoteNode",1,["echonet::remote_node::RemoteNode"]]] +"echonet":[["impl Unpin for Logger",1,["echonet::log::logger::Logger"]],["impl Unpin for ESV",1,["echonet::protocol::esv::ESV"]],["impl Unpin for Message",1,["echonet::protocol::message::Message"]],["impl Unpin for Property",1,["echonet::protocol::property::Property"]],["impl Unpin for Manager",1,["echonet::transport::manager::Manager"]],["impl Unpin for NotifytManager",1,["echonet::transport::notify_manager::NotifytManager"]],["impl Unpin for Bytes",1,["echonet::util::bytes::Bytes"]],["impl Unpin for OID",1,["echonet::util::oid::OID"]],["impl Unpin for Controller",1,["echonet::controller::Controller"]],["impl Unpin for StandardDatabase",1,["echonet::database::StandardDatabase"]],["impl Unpin for Device",1,["echonet::device::Device"]],["impl Unpin for Manufacture",1,["echonet::manufacture::Manufacture"]],["impl Unpin for Node",1,["echonet::node::Node"]],["impl Unpin for Object",1,["echonet::object::Object"]],["impl Unpin for PropertyRule",1,["echonet::property::PropertyRule"]],["impl Unpin for PropertyEnum",1,["echonet::property::PropertyEnum"]],["impl Unpin for Property",1,["echonet::property::Property"]],["impl Unpin for RemoteNode",1,["echonet::remote_node::RemoteNode"]]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/trait.impl/core/ops/drop/trait.Drop.js b/trait.impl/core/ops/drop/trait.Drop.js new file mode 100644 index 00000000..839b762b --- /dev/null +++ b/trait.impl/core/ops/drop/trait.Drop.js @@ -0,0 +1,3 @@ +(function() {var implementors = { +"echonet":[["impl Drop for Manager"],["impl Drop for Controller"],["impl Drop for Node"],["impl Drop for Device"]] +};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js b/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js similarity index 82% rename from implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js rename to trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js index 6636fa9a..3ced8653 100644 --- a/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js +++ b/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"echonet":[["impl RefUnwindSafe for Logger",1,["echonet::log::logger::Logger"]],["impl RefUnwindSafe for ESV",1,["echonet::protocol::esv::ESV"]],["impl RefUnwindSafe for Message",1,["echonet::protocol::message::Message"]],["impl RefUnwindSafe for Property",1,["echonet::protocol::property::Property"]],["impl RefUnwindSafe for Manager",1,["echonet::transport::manager::Manager"]],["impl RefUnwindSafe for NotifytManager",1,["echonet::transport::notify_manager::NotifytManager"]],["impl RefUnwindSafe for Bytes",1,["echonet::util::bytes::Bytes"]],["impl RefUnwindSafe for OID",1,["echonet::util::oid::OID"]],["impl RefUnwindSafe for Controller",1,["echonet::controller::Controller"]],["impl RefUnwindSafe for StandardDatabase",1,["echonet::database::StandardDatabase"]],["impl RefUnwindSafe for Device",1,["echonet::device::Device"]],["impl RefUnwindSafe for Manufacture",1,["echonet::manufacture::Manufacture"]],["impl RefUnwindSafe for Node",1,["echonet::node::Node"]],["impl RefUnwindSafe for Object",1,["echonet::object::Object"]],["impl RefUnwindSafe for PropertyRule",1,["echonet::property::PropertyRule"]],["impl RefUnwindSafe for PropertyEnum",1,["echonet::property::PropertyEnum"]],["impl RefUnwindSafe for Property",1,["echonet::property::Property"]],["impl RefUnwindSafe for RemoteNode",1,["echonet::remote_node::RemoteNode"]]] +"echonet":[["impl RefUnwindSafe for Logger",1,["echonet::log::logger::Logger"]],["impl RefUnwindSafe for ESV",1,["echonet::protocol::esv::ESV"]],["impl RefUnwindSafe for Message",1,["echonet::protocol::message::Message"]],["impl RefUnwindSafe for Property",1,["echonet::protocol::property::Property"]],["impl RefUnwindSafe for Manager",1,["echonet::transport::manager::Manager"]],["impl RefUnwindSafe for NotifytManager",1,["echonet::transport::notify_manager::NotifytManager"]],["impl RefUnwindSafe for Bytes",1,["echonet::util::bytes::Bytes"]],["impl RefUnwindSafe for OID",1,["echonet::util::oid::OID"]],["impl RefUnwindSafe for Controller",1,["echonet::controller::Controller"]],["impl RefUnwindSafe for StandardDatabase",1,["echonet::database::StandardDatabase"]],["impl RefUnwindSafe for Device",1,["echonet::device::Device"]],["impl RefUnwindSafe for Manufacture",1,["echonet::manufacture::Manufacture"]],["impl RefUnwindSafe for Node",1,["echonet::node::Node"]],["impl RefUnwindSafe for Object",1,["echonet::object::Object"]],["impl RefUnwindSafe for PropertyRule",1,["echonet::property::PropertyRule"]],["impl RefUnwindSafe for PropertyEnum",1,["echonet::property::PropertyEnum"]],["impl RefUnwindSafe for Property",1,["echonet::property::Property"]],["impl RefUnwindSafe for RemoteNode",1,["echonet::remote_node::RemoteNode"]]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/panic/unwind_safe/trait.UnwindSafe.js b/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js similarity index 81% rename from implementors/core/panic/unwind_safe/trait.UnwindSafe.js rename to trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js index a09e71be..cf66815f 100644 --- a/implementors/core/panic/unwind_safe/trait.UnwindSafe.js +++ b/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"echonet":[["impl UnwindSafe for Logger",1,["echonet::log::logger::Logger"]],["impl UnwindSafe for ESV",1,["echonet::protocol::esv::ESV"]],["impl UnwindSafe for Message",1,["echonet::protocol::message::Message"]],["impl UnwindSafe for Property",1,["echonet::protocol::property::Property"]],["impl UnwindSafe for Manager",1,["echonet::transport::manager::Manager"]],["impl UnwindSafe for NotifytManager",1,["echonet::transport::notify_manager::NotifytManager"]],["impl UnwindSafe for Bytes",1,["echonet::util::bytes::Bytes"]],["impl UnwindSafe for OID",1,["echonet::util::oid::OID"]],["impl UnwindSafe for Controller",1,["echonet::controller::Controller"]],["impl UnwindSafe for StandardDatabase",1,["echonet::database::StandardDatabase"]],["impl UnwindSafe for Device",1,["echonet::device::Device"]],["impl UnwindSafe for Manufacture",1,["echonet::manufacture::Manufacture"]],["impl UnwindSafe for Node",1,["echonet::node::Node"]],["impl UnwindSafe for Object",1,["echonet::object::Object"]],["impl UnwindSafe for PropertyRule",1,["echonet::property::PropertyRule"]],["impl UnwindSafe for PropertyEnum",1,["echonet::property::PropertyEnum"]],["impl UnwindSafe for Property",1,["echonet::property::Property"]],["impl UnwindSafe for RemoteNode",1,["echonet::remote_node::RemoteNode"]]] +"echonet":[["impl UnwindSafe for Logger",1,["echonet::log::logger::Logger"]],["impl UnwindSafe for ESV",1,["echonet::protocol::esv::ESV"]],["impl UnwindSafe for Message",1,["echonet::protocol::message::Message"]],["impl UnwindSafe for Property",1,["echonet::protocol::property::Property"]],["impl UnwindSafe for Manager",1,["echonet::transport::manager::Manager"]],["impl UnwindSafe for NotifytManager",1,["echonet::transport::notify_manager::NotifytManager"]],["impl UnwindSafe for Bytes",1,["echonet::util::bytes::Bytes"]],["impl UnwindSafe for OID",1,["echonet::util::oid::OID"]],["impl UnwindSafe for Controller",1,["echonet::controller::Controller"]],["impl UnwindSafe for StandardDatabase",1,["echonet::database::StandardDatabase"]],["impl UnwindSafe for Device",1,["echonet::device::Device"]],["impl UnwindSafe for Manufacture",1,["echonet::manufacture::Manufacture"]],["impl UnwindSafe for Node",1,["echonet::node::Node"]],["impl UnwindSafe for Object",1,["echonet::object::Object"]],["impl UnwindSafe for PropertyRule",1,["echonet::property::PropertyRule"]],["impl UnwindSafe for PropertyEnum",1,["echonet::property::PropertyEnum"]],["impl UnwindSafe for Property",1,["echonet::property::Property"]],["impl UnwindSafe for RemoteNode",1,["echonet::remote_node::RemoteNode"]]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/echonet/request_handler/trait.RequestHandler.js b/trait.impl/echonet/request_handler/trait.RequestHandler.js similarity index 100% rename from implementors/echonet/request_handler/trait.RequestHandler.js rename to trait.impl/echonet/request_handler/trait.RequestHandler.js diff --git a/implementors/echonet/transport/observer/trait.Observer.js b/trait.impl/echonet/transport/observer/trait.Observer.js similarity index 100% rename from implementors/echonet/transport/observer/trait.Observer.js rename to trait.impl/echonet/transport/observer/trait.Observer.js diff --git a/implementors/log/trait.Log.js b/trait.impl/log/trait.Log.js similarity index 84% rename from implementors/log/trait.Log.js rename to trait.impl/log/trait.Log.js index 3c4f3a68..43b074b8 100644 --- a/implementors/log/trait.Log.js +++ b/trait.impl/log/trait.Log.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"echonet":[["impl Log for Logger"]] +"echonet":[["impl Log for Logger"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/strum/trait.IntoEnumIterator.js b/trait.impl/strum/trait.IntoEnumIterator.js similarity index 100% rename from implementors/strum/trait.IntoEnumIterator.js rename to trait.impl/strum/trait.IntoEnumIterator.js diff --git a/type.impl/alloc/sync/struct.Arc.js b/type.impl/alloc/sync/struct.Arc.js new file mode 100644 index 00000000..9515bfe1 --- /dev/null +++ b/type.impl/alloc/sync/struct.Arc.js @@ -0,0 +1,3 @@ +(function() {var type_impls = { +"echonet":[["
source§

impl<T> Arc<T>

1.0.0 · source

pub fn new(data: T) -> Arc<T>

Constructs a new Arc<T>.

\n
§Examples
\n
use std::sync::Arc;\n\nlet five = Arc::new(5);
\n
1.60.0 · source

pub fn new_cyclic<F>(data_fn: F) -> Arc<T>
where\n F: FnOnce(&Weak<T>) -> T,

Constructs a new Arc<T> while giving you a Weak<T> to the allocation,\nto allow you to construct a T which holds a weak pointer to itself.

\n

Generally, a structure circularly referencing itself, either directly or\nindirectly, should not hold a strong reference to itself to prevent a memory leak.\nUsing this function, you get access to the weak pointer during the\ninitialization of T, before the Arc<T> is created, such that you can\nclone and store it inside the T.

\n

new_cyclic first allocates the managed allocation for the Arc<T>,\nthen calls your closure, giving it a Weak<T> to this allocation,\nand only afterwards completes the construction of the Arc<T> by placing\nthe T returned from your closure into the allocation.

\n

Since the new Arc<T> is not fully-constructed until Arc<T>::new_cyclic\nreturns, calling upgrade on the weak reference inside your closure will\nfail and result in a None value.

\n
§Panics
\n

If data_fn panics, the panic is propagated to the caller, and the\ntemporary Weak<T> is dropped normally.

\n
§Example
\n
use std::sync::{Arc, Weak};\n\nstruct Gadget {\n    me: Weak<Gadget>,\n}\n\nimpl Gadget {\n    /// Construct a reference counted Gadget.\n    fn new() -> Arc<Self> {\n        // `me` is a `Weak<Gadget>` pointing at the new allocation of the\n        // `Arc` we're constructing.\n        Arc::new_cyclic(|me| {\n            // Create the actual struct here.\n            Gadget { me: me.clone() }\n        })\n    }\n\n    /// Return a reference counted pointer to Self.\n    fn me(&self) -> Arc<Self> {\n        self.me.upgrade().unwrap()\n    }\n}
\n
source

pub fn new_uninit() -> Arc<MaybeUninit<T>>

🔬This is a nightly-only experimental API. (new_uninit)

Constructs a new Arc with uninitialized contents.

\n
§Examples
\n
#![feature(new_uninit)]\n#![feature(get_mut_unchecked)]\n\nuse std::sync::Arc;\n\nlet mut five = Arc::<u32>::new_uninit();\n\n// Deferred initialization:\nArc::get_mut(&mut five).unwrap().write(5);\n\nlet five = unsafe { five.assume_init() };\n\nassert_eq!(*five, 5)
\n
source

pub fn new_zeroed() -> Arc<MaybeUninit<T>>

🔬This is a nightly-only experimental API. (new_uninit)

Constructs a new Arc with uninitialized contents, with the memory\nbeing filled with 0 bytes.

\n

See MaybeUninit::zeroed for examples of correct and incorrect usage\nof this method.

\n
§Examples
\n
#![feature(new_uninit)]\n\nuse std::sync::Arc;\n\nlet zero = Arc::<u32>::new_zeroed();\nlet zero = unsafe { zero.assume_init() };\n\nassert_eq!(*zero, 0)
\n
1.33.0 · source

pub fn pin(data: T) -> Pin<Arc<T>>

Constructs a new Pin<Arc<T>>. If T does not implement Unpin, then\ndata will be pinned in memory and unable to be moved.

\n
source

pub fn try_pin(data: T) -> Result<Pin<Arc<T>>, AllocError>

🔬This is a nightly-only experimental API. (allocator_api)

Constructs a new Pin<Arc<T>>, return an error if allocation fails.

\n
source

pub fn try_new(data: T) -> Result<Arc<T>, AllocError>

🔬This is a nightly-only experimental API. (allocator_api)

Constructs a new Arc<T>, returning an error if allocation fails.

\n
§Examples
\n
#![feature(allocator_api)]\nuse std::sync::Arc;\n\nlet five = Arc::try_new(5)?;
\n
source

pub fn try_new_uninit() -> Result<Arc<MaybeUninit<T>>, AllocError>

🔬This is a nightly-only experimental API. (allocator_api)

Constructs a new Arc with uninitialized contents, returning an error\nif allocation fails.

\n
§Examples
\n
#![feature(new_uninit, allocator_api)]\n#![feature(get_mut_unchecked)]\n\nuse std::sync::Arc;\n\nlet mut five = Arc::<u32>::try_new_uninit()?;\n\n// Deferred initialization:\nArc::get_mut(&mut five).unwrap().write(5);\n\nlet five = unsafe { five.assume_init() };\n\nassert_eq!(*five, 5);
\n
source

pub fn try_new_zeroed() -> Result<Arc<MaybeUninit<T>>, AllocError>

🔬This is a nightly-only experimental API. (allocator_api)

Constructs a new Arc with uninitialized contents, with the memory\nbeing filled with 0 bytes, returning an error if allocation fails.

\n

See MaybeUninit::zeroed for examples of correct and incorrect usage\nof this method.

\n
§Examples
\n
#![feature(new_uninit, allocator_api)]\n\nuse std::sync::Arc;\n\nlet zero = Arc::<u32>::try_new_zeroed()?;\nlet zero = unsafe { zero.assume_init() };\n\nassert_eq!(*zero, 0);
\n
",0,"echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
source§

impl<T, A> Arc<T, A>
where\n A: Allocator,

source

pub fn allocator(this: &Arc<T, A>) -> &A

🔬This is a nightly-only experimental API. (allocator_api)

Returns a reference to the underlying allocator.

\n

Note: this is an associated function, which means that you have\nto call it as Arc::allocator(&a) instead of a.allocator(). This\nis so that there is no conflict with a method on the inner type.

\n
source

pub fn new_in(data: T, alloc: A) -> Arc<T, A>

🔬This is a nightly-only experimental API. (allocator_api)

Constructs a new Arc<T> in the provided allocator.

\n
§Examples
\n
#![feature(allocator_api)]\n\nuse std::sync::Arc;\nuse std::alloc::System;\n\nlet five = Arc::new_in(5, System);
\n
source

pub fn new_uninit_in(alloc: A) -> Arc<MaybeUninit<T>, A>

🔬This is a nightly-only experimental API. (allocator_api)

Constructs a new Arc with uninitialized contents in the provided allocator.

\n
§Examples
\n
#![feature(new_uninit)]\n#![feature(get_mut_unchecked)]\n#![feature(allocator_api)]\n\nuse std::sync::Arc;\nuse std::alloc::System;\n\nlet mut five = Arc::<u32, _>::new_uninit_in(System);\n\nlet five = unsafe {\n    // Deferred initialization:\n    Arc::get_mut_unchecked(&mut five).as_mut_ptr().write(5);\n\n    five.assume_init()\n};\n\nassert_eq!(*five, 5)
\n
source

pub fn new_zeroed_in(alloc: A) -> Arc<MaybeUninit<T>, A>

🔬This is a nightly-only experimental API. (allocator_api)

Constructs a new Arc with uninitialized contents, with the memory\nbeing filled with 0 bytes, in the provided allocator.

\n

See MaybeUninit::zeroed for examples of correct and incorrect usage\nof this method.

\n
§Examples
\n
#![feature(new_uninit)]\n#![feature(allocator_api)]\n\nuse std::sync::Arc;\nuse std::alloc::System;\n\nlet zero = Arc::<u32, _>::new_zeroed_in(System);\nlet zero = unsafe { zero.assume_init() };\n\nassert_eq!(*zero, 0)
\n
source

pub fn pin_in(data: T, alloc: A) -> Pin<Arc<T, A>>

🔬This is a nightly-only experimental API. (allocator_api)

Constructs a new Pin<Arc<T, A>> in the provided allocator. If T does not implement Unpin,\nthen data will be pinned in memory and unable to be moved.

\n
source

pub fn try_pin_in(data: T, alloc: A) -> Result<Pin<Arc<T, A>>, AllocError>

🔬This is a nightly-only experimental API. (allocator_api)

Constructs a new Pin<Arc<T, A>> in the provided allocator, return an error if allocation\nfails.

\n
source

pub fn try_new_in(data: T, alloc: A) -> Result<Arc<T, A>, AllocError>

🔬This is a nightly-only experimental API. (allocator_api)

Constructs a new Arc<T, A> in the provided allocator, returning an error if allocation fails.

\n
§Examples
\n
#![feature(allocator_api)]\n\nuse std::sync::Arc;\nuse std::alloc::System;\n\nlet five = Arc::try_new_in(5, System)?;
\n
source

pub fn try_new_uninit_in(alloc: A) -> Result<Arc<MaybeUninit<T>, A>, AllocError>

🔬This is a nightly-only experimental API. (allocator_api)

Constructs a new Arc with uninitialized contents, in the provided allocator, returning an\nerror if allocation fails.

\n
§Examples
\n
#![feature(new_uninit, allocator_api)]\n#![feature(get_mut_unchecked)]\n\nuse std::sync::Arc;\nuse std::alloc::System;\n\nlet mut five = Arc::<u32, _>::try_new_uninit_in(System)?;\n\nlet five = unsafe {\n    // Deferred initialization:\n    Arc::get_mut_unchecked(&mut five).as_mut_ptr().write(5);\n\n    five.assume_init()\n};\n\nassert_eq!(*five, 5);
\n
source

pub fn try_new_zeroed_in(alloc: A) -> Result<Arc<MaybeUninit<T>, A>, AllocError>

🔬This is a nightly-only experimental API. (allocator_api)

Constructs a new Arc with uninitialized contents, with the memory\nbeing filled with 0 bytes, in the provided allocator, returning an error if allocation\nfails.

\n

See MaybeUninit::zeroed for examples of correct and incorrect usage\nof this method.

\n
§Examples
\n
#![feature(new_uninit, allocator_api)]\n\nuse std::sync::Arc;\nuse std::alloc::System;\n\nlet zero = Arc::<u32, _>::try_new_zeroed_in(System)?;\nlet zero = unsafe { zero.assume_init() };\n\nassert_eq!(*zero, 0);
\n
1.4.0 · source

pub fn try_unwrap(this: Arc<T, A>) -> Result<T, Arc<T, A>>

Returns the inner value, if the Arc has exactly one strong reference.

\n

Otherwise, an Err is returned with the same Arc that was\npassed in.

\n

This will succeed even if there are outstanding weak references.

\n

It is strongly recommended to use Arc::into_inner instead if you don’t\nwant to keep the Arc in the Err case.\nImmediately dropping the Err payload, like in the expression\nArc::try_unwrap(this).ok(), can still cause the strong count to\ndrop to zero and the inner value of the Arc to be dropped:\nFor instance if two threads each execute this expression in parallel, then\nthere is a race condition. The threads could first both check whether they\nhave the last clone of their Arc via Arc::try_unwrap, and then\nboth drop their Arc in the call to ok,\ntaking the strong count from two down to zero.

\n
§Examples
\n
use std::sync::Arc;\n\nlet x = Arc::new(3);\nassert_eq!(Arc::try_unwrap(x), Ok(3));\n\nlet x = Arc::new(4);\nlet _y = Arc::clone(&x);\nassert_eq!(*Arc::try_unwrap(x).unwrap_err(), 4);
\n
1.70.0 · source

pub fn into_inner(this: Arc<T, A>) -> Option<T>

Returns the inner value, if the Arc has exactly one strong reference.

\n

Otherwise, None is returned and the Arc is dropped.

\n

This will succeed even if there are outstanding weak references.

\n

If Arc::into_inner is called on every clone of this Arc,\nit is guaranteed that exactly one of the calls returns the inner value.\nThis means in particular that the inner value is not dropped.

\n

Arc::try_unwrap is conceptually similar to Arc::into_inner, but it\nis meant for different use-cases. If used as a direct replacement\nfor Arc::into_inner anyway, such as with the expression\nArc::try_unwrap(this).ok(), then it does\nnot give the same guarantee as described in the previous paragraph.\nFor more information, see the examples below and read the documentation\nof Arc::try_unwrap.

\n
§Examples
\n

Minimal example demonstrating the guarantee that Arc::into_inner gives.

\n\n
use std::sync::Arc;\n\nlet x = Arc::new(3);\nlet y = Arc::clone(&x);\n\n// Two threads calling `Arc::into_inner` on both clones of an `Arc`:\nlet x_thread = std::thread::spawn(|| Arc::into_inner(x));\nlet y_thread = std::thread::spawn(|| Arc::into_inner(y));\n\nlet x_inner_value = x_thread.join().unwrap();\nlet y_inner_value = y_thread.join().unwrap();\n\n// One of the threads is guaranteed to receive the inner value:\nassert!(matches!(\n    (x_inner_value, y_inner_value),\n    (None, Some(3)) | (Some(3), None)\n));\n// The result could also be `(None, None)` if the threads called\n// `Arc::try_unwrap(x).ok()` and `Arc::try_unwrap(y).ok()` instead.
\n

A more practical example demonstrating the need for Arc::into_inner:

\n\n
use std::sync::Arc;\n\n// Definition of a simple singly linked list using `Arc`:\n#[derive(Clone)]\nstruct LinkedList<T>(Option<Arc<Node<T>>>);\nstruct Node<T>(T, Option<Arc<Node<T>>>);\n\n// Dropping a long `LinkedList<T>` relying on the destructor of `Arc`\n// can cause a stack overflow. To prevent this, we can provide a\n// manual `Drop` implementation that does the destruction in a loop:\nimpl<T> Drop for LinkedList<T> {\n    fn drop(&mut self) {\n        let mut link = self.0.take();\n        while let Some(arc_node) = link.take() {\n            if let Some(Node(_value, next)) = Arc::into_inner(arc_node) {\n                link = next;\n            }\n        }\n    }\n}\n\n// Implementation of `new` and `push` omitted\nimpl<T> LinkedList<T> {\n    /* ... */\n}\n\n// The following code could have still caused a stack overflow\n// despite the manual `Drop` impl if that `Drop` impl had used\n// `Arc::try_unwrap(arc).ok()` instead of `Arc::into_inner(arc)`.\n\n// Create a long list and clone it\nlet mut x = LinkedList::new();\nfor i in 0..100000 {\n    x.push(i); // Adds i to the front of x\n}\nlet y = x.clone();\n\n// Drop the clones in parallel\nlet x_thread = std::thread::spawn(|| drop(x));\nlet y_thread = std::thread::spawn(|| drop(y));\nx_thread.join().unwrap();\ny_thread.join().unwrap();
\n
",0,"echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
source§

impl<T> Arc<T>
where\n T: ?Sized,

1.17.0 · source

pub unsafe fn from_raw(ptr: *const T) -> Arc<T>

Constructs an Arc<T> from a raw pointer.

\n

The raw pointer must have been previously returned by a call to\nArc<U>::into_raw where U must have the same size and\nalignment as T. This is trivially true if U is T.\nNote that if U is not T but has the same size and alignment, this is\nbasically like transmuting references of different types. See\nmem::transmute for more information on what\nrestrictions apply in this case.

\n

The user of from_raw has to make sure a specific value of T is only\ndropped once.

\n

This function is unsafe because improper use may lead to memory unsafety,\neven if the returned Arc<T> is never accessed.

\n
§Examples
\n
use std::sync::Arc;\n\nlet x = Arc::new(\"hello\".to_owned());\nlet x_ptr = Arc::into_raw(x);\n\nunsafe {\n    // Convert back to an `Arc` to prevent leak.\n    let x = Arc::from_raw(x_ptr);\n    assert_eq!(&*x, \"hello\");\n\n    // Further calls to `Arc::from_raw(x_ptr)` would be memory-unsafe.\n}\n\n// The memory was freed when `x` went out of scope above, so `x_ptr` is now dangling!
\n
1.51.0 · source

pub unsafe fn increment_strong_count(ptr: *const T)

Increments the strong reference count on the Arc<T> associated with the\nprovided pointer by one.

\n
§Safety
\n

The pointer must have been obtained through Arc::into_raw, and the\nassociated Arc instance must be valid (i.e. the strong count must be at\nleast 1) for the duration of this method.

\n
§Examples
\n
use std::sync::Arc;\n\nlet five = Arc::new(5);\n\nunsafe {\n    let ptr = Arc::into_raw(five);\n    Arc::increment_strong_count(ptr);\n\n    // This assertion is deterministic because we haven't shared\n    // the `Arc` between threads.\n    let five = Arc::from_raw(ptr);\n    assert_eq!(2, Arc::strong_count(&five));\n}
\n
1.51.0 · source

pub unsafe fn decrement_strong_count(ptr: *const T)

Decrements the strong reference count on the Arc<T> associated with the\nprovided pointer by one.

\n
§Safety
\n

The pointer must have been obtained through Arc::into_raw, and the\nassociated Arc instance must be valid (i.e. the strong count must be at\nleast 1) when invoking this method. This method can be used to release the final\nArc and backing storage, but should not be called after the final Arc has been\nreleased.

\n
§Examples
\n
use std::sync::Arc;\n\nlet five = Arc::new(5);\n\nunsafe {\n    let ptr = Arc::into_raw(five);\n    Arc::increment_strong_count(ptr);\n\n    // Those assertions are deterministic because we haven't shared\n    // the `Arc` between threads.\n    let five = Arc::from_raw(ptr);\n    assert_eq!(2, Arc::strong_count(&five));\n    Arc::decrement_strong_count(ptr);\n    assert_eq!(1, Arc::strong_count(&five));\n}
\n
",0,"echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
source§

impl<T, A> Arc<T, A>
where\n A: Allocator,\n T: ?Sized,

1.17.0 · source

pub fn into_raw(this: Arc<T, A>) -> *const T

Consumes the Arc, returning the wrapped pointer.

\n

To avoid a memory leak the pointer must be converted back to an Arc using\nArc::from_raw.

\n
§Examples
\n
use std::sync::Arc;\n\nlet x = Arc::new(\"hello\".to_owned());\nlet x_ptr = Arc::into_raw(x);\nassert_eq!(unsafe { &*x_ptr }, \"hello\");
\n
1.45.0 · source

pub fn as_ptr(this: &Arc<T, A>) -> *const T

Provides a raw pointer to the data.

\n

The counts are not affected in any way and the Arc is not consumed. The pointer is valid for\nas long as there are strong counts in the Arc.

\n
§Examples
\n
use std::sync::Arc;\n\nlet x = Arc::new(\"hello\".to_owned());\nlet y = Arc::clone(&x);\nlet x_ptr = Arc::as_ptr(&x);\nassert_eq!(x_ptr, Arc::as_ptr(&y));\nassert_eq!(unsafe { &*x_ptr }, \"hello\");
\n
source

pub unsafe fn from_raw_in(ptr: *const T, alloc: A) -> Arc<T, A>

🔬This is a nightly-only experimental API. (allocator_api)

Constructs an Arc<T, A> from a raw pointer.

\n

The raw pointer must have been previously returned by a call to\nArc<U, A>::into_raw where U must have the same size and\nalignment as T. This is trivially true if U is T.\nNote that if U is not T but has the same size and alignment, this is\nbasically like transmuting references of different types. See\nmem::transmute for more information on what\nrestrictions apply in this case.

\n

The raw pointer must point to a block of memory allocated by alloc

\n

The user of from_raw has to make sure a specific value of T is only\ndropped once.

\n

This function is unsafe because improper use may lead to memory unsafety,\neven if the returned Arc<T> is never accessed.

\n
§Examples
\n
#![feature(allocator_api)]\n\nuse std::sync::Arc;\nuse std::alloc::System;\n\nlet x = Arc::new_in(\"hello\".to_owned(), System);\nlet x_ptr = Arc::into_raw(x);\n\nunsafe {\n    // Convert back to an `Arc` to prevent leak.\n    let x = Arc::from_raw_in(x_ptr, System);\n    assert_eq!(&*x, \"hello\");\n\n    // Further calls to `Arc::from_raw(x_ptr)` would be memory-unsafe.\n}\n\n// The memory was freed when `x` went out of scope above, so `x_ptr` is now dangling!
\n
1.4.0 · source

pub fn downgrade(this: &Arc<T, A>) -> Weak<T, A>
where\n A: Clone,

Creates a new Weak pointer to this allocation.

\n
§Examples
\n
use std::sync::Arc;\n\nlet five = Arc::new(5);\n\nlet weak_five = Arc::downgrade(&five);
\n
1.15.0 · source

pub fn weak_count(this: &Arc<T, A>) -> usize

Gets the number of Weak pointers to this allocation.

\n
§Safety
\n

This method by itself is safe, but using it correctly requires extra care.\nAnother thread can change the weak count at any time,\nincluding potentially between calling this method and acting on the result.

\n
§Examples
\n
use std::sync::Arc;\n\nlet five = Arc::new(5);\nlet _weak_five = Arc::downgrade(&five);\n\n// This assertion is deterministic because we haven't shared\n// the `Arc` or `Weak` between threads.\nassert_eq!(1, Arc::weak_count(&five));
\n
1.15.0 · source

pub fn strong_count(this: &Arc<T, A>) -> usize

Gets the number of strong (Arc) pointers to this allocation.

\n
§Safety
\n

This method by itself is safe, but using it correctly requires extra care.\nAnother thread can change the strong count at any time,\nincluding potentially between calling this method and acting on the result.

\n
§Examples
\n
use std::sync::Arc;\n\nlet five = Arc::new(5);\nlet _also_five = Arc::clone(&five);\n\n// This assertion is deterministic because we haven't shared\n// the `Arc` between threads.\nassert_eq!(2, Arc::strong_count(&five));
\n
source

pub unsafe fn increment_strong_count_in(ptr: *const T, alloc: A)
where\n A: Clone,

🔬This is a nightly-only experimental API. (allocator_api)

Increments the strong reference count on the Arc<T> associated with the\nprovided pointer by one.

\n
§Safety
\n

The pointer must have been obtained through Arc::into_raw, and the\nassociated Arc instance must be valid (i.e. the strong count must be at\nleast 1) for the duration of this method,, and ptr must point to a block of memory\nallocated by alloc.

\n
§Examples
\n
#![feature(allocator_api)]\n\nuse std::sync::Arc;\nuse std::alloc::System;\n\nlet five = Arc::new_in(5, System);\n\nunsafe {\n    let ptr = Arc::into_raw(five);\n    Arc::increment_strong_count_in(ptr, System);\n\n    // This assertion is deterministic because we haven't shared\n    // the `Arc` between threads.\n    let five = Arc::from_raw_in(ptr, System);\n    assert_eq!(2, Arc::strong_count(&five));\n}
\n
source

pub unsafe fn decrement_strong_count_in(ptr: *const T, alloc: A)

🔬This is a nightly-only experimental API. (allocator_api)

Decrements the strong reference count on the Arc<T> associated with the\nprovided pointer by one.

\n
§Safety
\n

The pointer must have been obtained through Arc::into_raw, the\nassociated Arc instance must be valid (i.e. the strong count must be at\nleast 1) when invoking this method, and ptr must point to a block of memory\nallocated by alloc. This method can be used to release the final\nArc and backing storage, but should not be called after the final Arc has been\nreleased.

\n
§Examples
\n
#![feature(allocator_api)]\n\nuse std::sync::Arc;\nuse std::alloc::System;\n\nlet five = Arc::new_in(5, System);\n\nunsafe {\n    let ptr = Arc::into_raw(five);\n    Arc::increment_strong_count_in(ptr, System);\n\n    // Those assertions are deterministic because we haven't shared\n    // the `Arc` between threads.\n    let five = Arc::from_raw_in(ptr, System);\n    assert_eq!(2, Arc::strong_count(&five));\n    Arc::decrement_strong_count_in(ptr, System);\n    assert_eq!(1, Arc::strong_count(&five));\n}
\n
1.17.0 · source

pub fn ptr_eq(this: &Arc<T, A>, other: &Arc<T, A>) -> bool

Returns true if the two Arcs point to the same allocation in a vein similar to\nptr::eq. This function ignores the metadata of dyn Trait pointers.

\n
§Examples
\n
use std::sync::Arc;\n\nlet five = Arc::new(5);\nlet same_five = Arc::clone(&five);\nlet other_five = Arc::new(5);\n\nassert!(Arc::ptr_eq(&five, &same_five));\nassert!(!Arc::ptr_eq(&five, &other_five));
\n
",0,"echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
source§

impl<T, A> Arc<T, A>
where\n T: Clone,\n A: Allocator + Clone,

1.4.0 · source

pub fn make_mut(this: &mut Arc<T, A>) -> &mut T

Makes a mutable reference into the given Arc.

\n

If there are other Arc pointers to the same allocation, then make_mut will\nclone the inner value to a new allocation to ensure unique ownership. This is also\nreferred to as clone-on-write.

\n

However, if there are no other Arc pointers to this allocation, but some Weak\npointers, then the Weak pointers will be dissociated and the inner value will not\nbe cloned.

\n

See also get_mut, which will fail rather than cloning the inner value\nor dissociating Weak pointers.

\n
§Examples
\n
use std::sync::Arc;\n\nlet mut data = Arc::new(5);\n\n*Arc::make_mut(&mut data) += 1;         // Won't clone anything\nlet mut other_data = Arc::clone(&data); // Won't clone inner data\n*Arc::make_mut(&mut data) += 1;         // Clones inner data\n*Arc::make_mut(&mut data) += 1;         // Won't clone anything\n*Arc::make_mut(&mut other_data) *= 2;   // Won't clone anything\n\n// Now `data` and `other_data` point to different allocations.\nassert_eq!(*data, 8);\nassert_eq!(*other_data, 12);
\n

Weak pointers will be dissociated:

\n\n
use std::sync::Arc;\n\nlet mut data = Arc::new(75);\nlet weak = Arc::downgrade(&data);\n\nassert!(75 == *data);\nassert!(75 == *weak.upgrade().unwrap());\n\n*Arc::make_mut(&mut data) += 1;\n\nassert!(76 == *data);\nassert!(weak.upgrade().is_none());
\n
1.76.0 · source

pub fn unwrap_or_clone(this: Arc<T, A>) -> T

If we have the only reference to T then unwrap it. Otherwise, clone T and return the\nclone.

\n

Assuming arc_t is of type Arc<T>, this function is functionally equivalent to\n(*arc_t).clone(), but will avoid cloning the inner value where possible.

\n
§Examples
\n
let inner = String::from(\"test\");\nlet ptr = inner.as_ptr();\n\nlet arc = Arc::new(inner);\nlet inner = Arc::unwrap_or_clone(arc);\n// The inner value was not cloned\nassert!(ptr::eq(ptr, inner.as_ptr()));\n\nlet arc = Arc::new(inner);\nlet arc2 = arc.clone();\nlet inner = Arc::unwrap_or_clone(arc);\n// Because there were 2 references, we had to clone the inner value.\nassert!(!ptr::eq(ptr, inner.as_ptr()));\n// `arc2` is the last reference, so when we unwrap it we get back\n// the original `String`.\nlet inner = Arc::unwrap_or_clone(arc2);\nassert!(ptr::eq(ptr, inner.as_ptr()));
\n
",0,"echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
source§

impl<T, A> Arc<T, A>
where\n A: Allocator,\n T: ?Sized,

1.4.0 · source

pub fn get_mut(this: &mut Arc<T, A>) -> Option<&mut T>

Returns a mutable reference into the given Arc, if there are\nno other Arc or Weak pointers to the same allocation.

\n

Returns None otherwise, because it is not safe to\nmutate a shared value.

\n

See also make_mut, which will clone\nthe inner value when there are other Arc pointers.

\n
§Examples
\n
use std::sync::Arc;\n\nlet mut x = Arc::new(3);\n*Arc::get_mut(&mut x).unwrap() = 4;\nassert_eq!(*x, 4);\n\nlet _y = Arc::clone(&x);\nassert!(Arc::get_mut(&mut x).is_none());
\n
source

pub unsafe fn get_mut_unchecked(this: &mut Arc<T, A>) -> &mut T

🔬This is a nightly-only experimental API. (get_mut_unchecked)

Returns a mutable reference into the given Arc,\nwithout any check.

\n

See also get_mut, which is safe and does appropriate checks.

\n
§Safety
\n

If any other Arc or Weak pointers to the same allocation exist, then\nthey must not be dereferenced or have active borrows for the duration\nof the returned borrow, and their inner type must be exactly the same as the\ninner type of this Rc (including lifetimes). This is trivially the case if no\nsuch pointers exist, for example immediately after Arc::new.

\n
§Examples
\n
#![feature(get_mut_unchecked)]\n\nuse std::sync::Arc;\n\nlet mut x = Arc::new(String::new());\nunsafe {\n    Arc::get_mut_unchecked(&mut x).push_str(\"foo\")\n}\nassert_eq!(*x, \"foo\");
\n

Other Arc pointers to the same allocation must be to the same type.

\n\n
#![feature(get_mut_unchecked)]\n\nuse std::sync::Arc;\n\nlet x: Arc<str> = Arc::from(\"Hello, world!\");\nlet mut y: Arc<[u8]> = x.clone().into();\nunsafe {\n    // this is Undefined Behavior, because x's inner type is str, not [u8]\n    Arc::get_mut_unchecked(&mut y).fill(0xff); // 0xff is invalid in UTF-8\n}\nprintln!(\"{}\", &*x); // Invalid UTF-8 in a str
\n

Other Arc pointers to the same allocation must be to the exact same type, including lifetimes.

\n\n
#![feature(get_mut_unchecked)]\n\nuse std::sync::Arc;\n\nlet x: Arc<&str> = Arc::new(\"Hello, world!\");\n{\n    let s = String::from(\"Oh, no!\");\n    let mut y: Arc<&str> = x.clone().into();\n    unsafe {\n        // this is Undefined Behavior, because x's inner type\n        // is &'long str, not &'short str\n        *Arc::get_mut_unchecked(&mut y) = &s;\n    }\n}\nprintln!(\"{}\", &*x); // Use-after-free
\n
",0,"echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
1.64.0 · source§

impl<T> AsFd for Arc<T>
where\n T: AsFd,

This impl allows implementing traits that require AsFd on Arc.

\n\n
use std::net::UdpSocket;\nuse std::sync::Arc;\n\ntrait MyTrait: AsFd {}\nimpl MyTrait for Arc<UdpSocket> {}\nimpl MyTrait for Box<UdpSocket> {}
\n
source§

fn as_fd(&self) -> BorrowedFd<'_>

Borrows the file descriptor. Read more
","AsFd","echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
1.63.0 · source§

impl<T> AsRawFd for Arc<T>
where\n T: AsRawFd,

This impl allows implementing traits that require AsRawFd on Arc.

\n\n
use std::net::UdpSocket;\nuse std::sync::Arc;\ntrait MyTrait: AsRawFd {\n}\nimpl MyTrait for Arc<UdpSocket> {}\nimpl MyTrait for Box<UdpSocket> {}
\n
source§

fn as_raw_fd(&self) -> i32

Extracts the raw file descriptor. Read more
","AsRawFd","echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
1.0.0 · source§

impl<T, A> Hash for Arc<T, A>
where\n T: Hash + ?Sized,\n A: Allocator,

source§

fn hash<H>(&self, state: &mut H)
where\n H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where\n H: Hasher,\n Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
","Hash","echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
1.0.0 · source§

impl<T, A> Clone for Arc<T, A>
where\n A: Allocator + Clone,\n T: ?Sized,

source§

fn clone(&self) -> Arc<T, A>

Makes a clone of the Arc pointer.

\n

This creates another pointer to the same allocation, increasing the\nstrong reference count.

\n
§Examples
\n
use std::sync::Arc;\n\nlet five = Arc::new(5);\n\nlet _ = Arc::clone(&five);
\n
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
","Clone","echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
1.33.0 · source§

impl<T, A> Unpin for Arc<T, A>
where\n A: Allocator,\n T: ?Sized,

","Unpin","echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
source§

impl<T, U, A> CoerceUnsized<Arc<U, A>> for Arc<T, A>
where\n T: Unsize<U> + ?Sized,\n A: Allocator,\n U: ?Sized,

","CoerceUnsized>","echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
1.0.0 · source§

impl<T, A> Ord for Arc<T, A>
where\n T: Ord + ?Sized,\n A: Allocator,

source§

fn cmp(&self, other: &Arc<T, A>) -> Ordering

Comparison for two Arcs.

\n

The two are compared by calling cmp() on their inner values.

\n
§Examples
\n
use std::sync::Arc;\nuse std::cmp::Ordering;\n\nlet five = Arc::new(5);\n\nassert_eq!(Ordering::Less, five.cmp(&Arc::new(6)));
\n
1.21.0 · source§

fn max(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where\n Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
","Ord","echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
1.0.0 · source§

impl<T, A> Sync for Arc<T, A>
where\n T: Sync + Send + ?Sized,\n A: Allocator + Sync,

","Sync","echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
1.0.0 · source§

impl<T, A> Drop for Arc<T, A>
where\n A: Allocator,\n T: ?Sized,

source§

fn drop(&mut self)

Drops the Arc.

\n

This will decrement the strong reference count. If the strong reference\ncount reaches zero then the only other references (if any) are\nWeak, so we drop the inner value.

\n
§Examples
\n
use std::sync::Arc;\n\nstruct Foo;\n\nimpl Drop for Foo {\n    fn drop(&mut self) {\n        println!(\"dropped!\");\n    }\n}\n\nlet foo  = Arc::new(Foo);\nlet foo2 = Arc::clone(&foo);\n\ndrop(foo);    // Doesn't print anything\ndrop(foo2);   // Prints \"dropped!\"
\n
","Drop","echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
1.0.0 · source§

impl<T, A> Debug for Arc<T, A>
where\n T: Debug + ?Sized,\n A: Allocator,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
","Debug","echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
1.0.0 · source§

impl<T, A> PartialOrd for Arc<T, A>
where\n T: PartialOrd + ?Sized,\n A: Allocator,

source§

fn partial_cmp(&self, other: &Arc<T, A>) -> Option<Ordering>

Partial comparison for two Arcs.

\n

The two are compared by calling partial_cmp() on their inner values.

\n
§Examples
\n
use std::sync::Arc;\nuse std::cmp::Ordering;\n\nlet five = Arc::new(5);\n\nassert_eq!(Some(Ordering::Less), five.partial_cmp(&Arc::new(6)));
\n
source§

fn lt(&self, other: &Arc<T, A>) -> bool

Less-than comparison for two Arcs.

\n

The two are compared by calling < on their inner values.

\n
§Examples
\n
use std::sync::Arc;\n\nlet five = Arc::new(5);\n\nassert!(five < Arc::new(6));
\n
source§

fn le(&self, other: &Arc<T, A>) -> bool

‘Less than or equal to’ comparison for two Arcs.

\n

The two are compared by calling <= on their inner values.

\n
§Examples
\n
use std::sync::Arc;\n\nlet five = Arc::new(5);\n\nassert!(five <= Arc::new(5));
\n
source§

fn gt(&self, other: &Arc<T, A>) -> bool

Greater-than comparison for two Arcs.

\n

The two are compared by calling > on their inner values.

\n
§Examples
\n
use std::sync::Arc;\n\nlet five = Arc::new(5);\n\nassert!(five > Arc::new(4));
\n
source§

fn ge(&self, other: &Arc<T, A>) -> bool

‘Greater than or equal to’ comparison for two Arcs.

\n

The two are compared by calling >= on their inner values.

\n
§Examples
\n
use std::sync::Arc;\n\nlet five = Arc::new(5);\n\nassert!(five >= Arc::new(5));
\n
","PartialOrd","echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
1.52.0 · source§

impl<T> Error for Arc<T>
where\n T: Error + ?Sized,

source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
source§

fn source(&self) -> Option<&(dyn Error + 'static)>

The lower-level source of this error, if any. Read more
source§

fn provide<'a>(&'a self, req: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type based access to context intended for error reports. Read more
","Error","echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
1.0.0 · source§

impl<T, A> Deref for Arc<T, A>
where\n A: Allocator,\n T: ?Sized,

§

type Target = T

The resulting type after dereferencing.
source§

fn deref(&self) -> &T

Dereferences the value.
","Deref","echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
1.0.0 · source§

impl<T, A> Display for Arc<T, A>
where\n T: Display + ?Sized,\n A: Allocator,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
","Display","echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
1.6.0 · source§

impl<T> From<T> for Arc<T>

source§

fn from(t: T) -> Arc<T>

Converts a T into an Arc<T>

\n

The conversion moves the value into a\nnewly allocated Arc. It is equivalent to\ncalling Arc::new(t).

\n
§Example
\n
let x = 5;\nlet arc = Arc::new(5);\n\nassert_eq!(Arc::from(x), arc);
\n
","From","echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
1.21.0 · source§

impl<T, A> From<Box<T, A>> for Arc<T, A>
where\n A: Allocator,\n T: ?Sized,

source§

fn from(v: Box<T, A>) -> Arc<T, A>

Move a boxed object to a new, reference-counted allocation.

\n
§Example
\n
let unique: Box<str> = Box::from(\"eggplant\");\nlet shared: Arc<str> = Arc::from(unique);\nassert_eq!(\"eggplant\", &shared[..]);
\n
","From>","echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
1.45.0 · source§

impl<'a, B> From<Cow<'a, B>> for Arc<B>
where\n B: ToOwned + ?Sized,\n Arc<B>: From<&'a B> + From<<B as ToOwned>::Owned>,

source§

fn from(cow: Cow<'a, B>) -> Arc<B>

Create an atomically reference-counted pointer from\na clone-on-write pointer by copying its content.

\n
§Example
\n
let cow: Cow<'_, str> = Cow::Borrowed(\"eggplant\");\nlet shared: Arc<str> = Arc::from(cow);\nassert_eq!(\"eggplant\", &shared[..]);
\n
","From>","echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
1.0.0 · source§

impl<T, A> Eq for Arc<T, A>
where\n T: Eq + ?Sized,\n A: Allocator,

","Eq","echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
1.0.0 · source§

impl<T> Default for Arc<T>
where\n T: Default,

source§

fn default() -> Arc<T>

Creates a new Arc<T>, with the Default value for T.

\n
§Examples
\n
use std::sync::Arc;\n\nlet x: Arc<i32> = Default::default();\nassert_eq!(*x, 0);
\n
","Default","echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
1.0.0 · source§

impl<T, A> Borrow<T> for Arc<T, A>
where\n A: Allocator,\n T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
","Borrow","echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
1.0.0 · source§

impl<T, A> Send for Arc<T, A>
where\n T: Sync + Send + ?Sized,\n A: Allocator + Send,

","Send","echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
1.0.0 · source§

impl<T, A> PartialEq for Arc<T, A>
where\n T: PartialEq + ?Sized,\n A: Allocator,

source§

fn eq(&self, other: &Arc<T, A>) -> bool

Equality for two Arcs.

\n

Two Arcs are equal if their inner values are equal, even if they are\nstored in different allocation.

\n

If T also implements Eq (implying reflexivity of equality),\ntwo Arcs that point to the same allocation are always equal.

\n
§Examples
\n
use std::sync::Arc;\n\nlet five = Arc::new(5);\n\nassert!(five == Arc::new(5));
\n
source§

fn ne(&self, other: &Arc<T, A>) -> bool

Inequality for two Arcs.

\n

Two Arcs are not equal if their inner values are not equal.

\n

If T also implements Eq (implying reflexivity of equality),\ntwo Arcs that point to the same value are always equal.

\n
§Examples
\n
use std::sync::Arc;\n\nlet five = Arc::new(5);\n\nassert!(five != Arc::new(6));
\n
","PartialEq","echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
1.5.0 · source§

impl<T, A> AsRef<T> for Arc<T, A>
where\n A: Allocator,\n T: ?Sized,

source§

fn as_ref(&self) -> &T

Converts this type into a shared reference of the (usually inferred) input type.
","AsRef","echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
1.0.0 · source§

impl<T, A> Pointer for Arc<T, A>
where\n A: Allocator,\n T: ?Sized,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter.
","Pointer","echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
source§

impl<T, U> DispatchFromDyn<Arc<U>> for Arc<T>
where\n T: Unsize<U> + ?Sized,\n U: ?Sized,

","DispatchFromDyn>","echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"],["
1.9.0 · source§

impl<T, A> UnwindSafe for Arc<T, A>
where\n T: RefUnwindSafe + ?Sized,\n A: Allocator + UnwindSafe,

","UnwindSafe","echonet::transport::observer::ObserverObject","echonet::request_handler::RequestHandlerObject"]] +};if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})() \ No newline at end of file diff --git a/type.impl/core/result/enum.Result.js b/type.impl/core/result/enum.Result.js new file mode 100644 index 00000000..d9ef7307 --- /dev/null +++ b/type.impl/core/result/enum.Result.js @@ -0,0 +1,3 @@ +(function() {var type_impls = { +"echonet":[["
source§

impl<T, E> Result<T, E>

1.0.0 (const: 1.48.0) · source

pub const fn is_ok(&self) -> bool

Returns true if the result is Ok.

\n
§Examples
\n
let x: Result<i32, &str> = Ok(-3);\nassert_eq!(x.is_ok(), true);\n\nlet x: Result<i32, &str> = Err(\"Some error message\");\nassert_eq!(x.is_ok(), false);
\n
1.70.0 · source

pub fn is_ok_and(self, f: impl FnOnce(T) -> bool) -> bool

Returns true if the result is Ok and the value inside of it matches a predicate.

\n
§Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.is_ok_and(|x| x > 1), true);\n\nlet x: Result<u32, &str> = Ok(0);\nassert_eq!(x.is_ok_and(|x| x > 1), false);\n\nlet x: Result<u32, &str> = Err(\"hey\");\nassert_eq!(x.is_ok_and(|x| x > 1), false);
\n
1.0.0 (const: 1.48.0) · source

pub const fn is_err(&self) -> bool

Returns true if the result is Err.

\n
§Examples
\n
let x: Result<i32, &str> = Ok(-3);\nassert_eq!(x.is_err(), false);\n\nlet x: Result<i32, &str> = Err(\"Some error message\");\nassert_eq!(x.is_err(), true);
\n
1.70.0 · source

pub fn is_err_and(self, f: impl FnOnce(E) -> bool) -> bool

Returns true if the result is Err and the value inside of it matches a predicate.

\n
§Examples
\n
use std::io::{Error, ErrorKind};\n\nlet x: Result<u32, Error> = Err(Error::new(ErrorKind::NotFound, \"!\"));\nassert_eq!(x.is_err_and(|x| x.kind() == ErrorKind::NotFound), true);\n\nlet x: Result<u32, Error> = Err(Error::new(ErrorKind::PermissionDenied, \"!\"));\nassert_eq!(x.is_err_and(|x| x.kind() == ErrorKind::NotFound), false);\n\nlet x: Result<u32, Error> = Ok(123);\nassert_eq!(x.is_err_and(|x| x.kind() == ErrorKind::NotFound), false);
\n
1.0.0 · source

pub fn ok(self) -> Option<T>

Converts from Result<T, E> to Option<T>.

\n

Converts self into an Option<T>, consuming self,\nand discarding the error, if any.

\n
§Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.ok(), Some(2));\n\nlet x: Result<u32, &str> = Err(\"Nothing here\");\nassert_eq!(x.ok(), None);
\n
1.0.0 · source

pub fn err(self) -> Option<E>

Converts from Result<T, E> to Option<E>.

\n

Converts self into an Option<E>, consuming self,\nand discarding the success value, if any.

\n
§Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.err(), None);\n\nlet x: Result<u32, &str> = Err(\"Nothing here\");\nassert_eq!(x.err(), Some(\"Nothing here\"));
\n
1.0.0 (const: 1.48.0) · source

pub const fn as_ref(&self) -> Result<&T, &E>

Converts from &Result<T, E> to Result<&T, &E>.

\n

Produces a new Result, containing a reference\ninto the original, leaving the original in place.

\n
§Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.as_ref(), Ok(&2));\n\nlet x: Result<u32, &str> = Err(\"Error\");\nassert_eq!(x.as_ref(), Err(&\"Error\"));
\n
1.0.0 (const: unstable) · source

pub fn as_mut(&mut self) -> Result<&mut T, &mut E>

Converts from &mut Result<T, E> to Result<&mut T, &mut E>.

\n
§Examples
\n
fn mutate(r: &mut Result<i32, i32>) {\n    match r.as_mut() {\n        Ok(v) => *v = 42,\n        Err(e) => *e = 0,\n    }\n}\n\nlet mut x: Result<i32, i32> = Ok(2);\nmutate(&mut x);\nassert_eq!(x.unwrap(), 42);\n\nlet mut x: Result<i32, i32> = Err(13);\nmutate(&mut x);\nassert_eq!(x.unwrap_err(), 0);
\n
1.0.0 · source

pub fn map<U, F>(self, op: F) -> Result<U, E>
where\n F: FnOnce(T) -> U,

Maps a Result<T, E> to Result<U, E> by applying a function to a\ncontained Ok value, leaving an Err value untouched.

\n

This function can be used to compose the results of two functions.

\n
§Examples
\n

Print the numbers on each line of a string multiplied by two.

\n\n
let line = \"1\\n2\\n3\\n4\\n\";\n\nfor num in line.lines() {\n    match num.parse::<i32>().map(|i| i * 2) {\n        Ok(n) => println!(\"{n}\"),\n        Err(..) => {}\n    }\n}
\n
1.41.0 · source

pub fn map_or<U, F>(self, default: U, f: F) -> U
where\n F: FnOnce(T) -> U,

Returns the provided default (if Err), or\napplies a function to the contained value (if Ok).

\n

Arguments passed to map_or are eagerly evaluated; if you are passing\nthe result of a function call, it is recommended to use map_or_else,\nwhich is lazily evaluated.

\n
§Examples
\n
let x: Result<_, &str> = Ok(\"foo\");\nassert_eq!(x.map_or(42, |v| v.len()), 3);\n\nlet x: Result<&str, _> = Err(\"bar\");\nassert_eq!(x.map_or(42, |v| v.len()), 42);
\n
1.41.0 · source

pub fn map_or_else<U, D, F>(self, default: D, f: F) -> U
where\n D: FnOnce(E) -> U,\n F: FnOnce(T) -> U,

Maps a Result<T, E> to U by applying fallback function default to\na contained Err value, or function f to a contained Ok value.

\n

This function can be used to unpack a successful result\nwhile handling an error.

\n
§Examples
\n
let k = 21;\n\nlet x : Result<_, &str> = Ok(\"foo\");\nassert_eq!(x.map_or_else(|e| k * 2, |v| v.len()), 3);\n\nlet x : Result<&str, _> = Err(\"bar\");\nassert_eq!(x.map_or_else(|e| k * 2, |v| v.len()), 42);
\n
1.0.0 · source

pub fn map_err<F, O>(self, op: O) -> Result<T, F>
where\n O: FnOnce(E) -> F,

Maps a Result<T, E> to Result<T, F> by applying a function to a\ncontained Err value, leaving an Ok value untouched.

\n

This function can be used to pass through a successful result while handling\nan error.

\n
§Examples
\n
fn stringify(x: u32) -> String { format!(\"error code: {x}\") }\n\nlet x: Result<u32, u32> = Ok(2);\nassert_eq!(x.map_err(stringify), Ok(2));\n\nlet x: Result<u32, u32> = Err(13);\nassert_eq!(x.map_err(stringify), Err(\"error code: 13\".to_string()));
\n
1.76.0 · source

pub fn inspect<F>(self, f: F) -> Result<T, E>
where\n F: FnOnce(&T),

Calls the provided closure with a reference to the contained value (if Ok).

\n
§Examples
\n
let x: u8 = \"4\"\n    .parse::<u8>()\n    .inspect(|x| println!(\"original: {x}\"))\n    .map(|x| x.pow(3))\n    .expect(\"failed to parse number\");
\n
1.76.0 · source

pub fn inspect_err<F>(self, f: F) -> Result<T, E>
where\n F: FnOnce(&E),

Calls the provided closure with a reference to the contained error (if Err).

\n
§Examples
\n
use std::{fs, io};\n\nfn read() -> io::Result<String> {\n    fs::read_to_string(\"address.txt\")\n        .inspect_err(|e| eprintln!(\"failed to read file: {e}\"))\n}
\n
1.47.0 · source

pub fn as_deref(&self) -> Result<&<T as Deref>::Target, &E>
where\n T: Deref,

Converts from Result<T, E> (or &Result<T, E>) to Result<&<T as Deref>::Target, &E>.

\n

Coerces the Ok variant of the original Result via Deref\nand returns the new Result.

\n
§Examples
\n
let x: Result<String, u32> = Ok(\"hello\".to_string());\nlet y: Result<&str, &u32> = Ok(\"hello\");\nassert_eq!(x.as_deref(), y);\n\nlet x: Result<String, u32> = Err(42);\nlet y: Result<&str, &u32> = Err(&42);\nassert_eq!(x.as_deref(), y);
\n
1.47.0 · source

pub fn as_deref_mut(&mut self) -> Result<&mut <T as Deref>::Target, &mut E>
where\n T: DerefMut,

Converts from Result<T, E> (or &mut Result<T, E>) to Result<&mut <T as DerefMut>::Target, &mut E>.

\n

Coerces the Ok variant of the original Result via DerefMut\nand returns the new Result.

\n
§Examples
\n
let mut s = \"HELLO\".to_string();\nlet mut x: Result<String, u32> = Ok(\"hello\".to_string());\nlet y: Result<&mut str, &mut u32> = Ok(&mut s);\nassert_eq!(x.as_deref_mut().map(|x| { x.make_ascii_uppercase(); x }), y);\n\nlet mut i = 42;\nlet mut x: Result<String, u32> = Err(42);\nlet y: Result<&mut str, &mut u32> = Err(&mut i);\nassert_eq!(x.as_deref_mut().map(|x| { x.make_ascii_uppercase(); x }), y);
\n
1.0.0 · source

pub fn iter(&self) -> Iter<'_, T>

Returns an iterator over the possibly contained value.

\n

The iterator yields one value if the result is Result::Ok, otherwise none.

\n
§Examples
\n
let x: Result<u32, &str> = Ok(7);\nassert_eq!(x.iter().next(), Some(&7));\n\nlet x: Result<u32, &str> = Err(\"nothing!\");\nassert_eq!(x.iter().next(), None);
\n
1.0.0 · source

pub fn iter_mut(&mut self) -> IterMut<'_, T>

Returns a mutable iterator over the possibly contained value.

\n

The iterator yields one value if the result is Result::Ok, otherwise none.

\n
§Examples
\n
let mut x: Result<u32, &str> = Ok(7);\nmatch x.iter_mut().next() {\n    Some(v) => *v = 40,\n    None => {},\n}\nassert_eq!(x, Ok(40));\n\nlet mut x: Result<u32, &str> = Err(\"nothing!\");\nassert_eq!(x.iter_mut().next(), None);
\n
1.4.0 · source

pub fn expect(self, msg: &str) -> T
where\n E: Debug,

Returns the contained Ok value, consuming the self value.

\n

Because this function may panic, its use is generally discouraged.\nInstead, prefer to use pattern matching and handle the Err\ncase explicitly, or call unwrap_or, unwrap_or_else, or\nunwrap_or_default.

\n
§Panics
\n

Panics if the value is an Err, with a panic message including the\npassed message, and the content of the Err.

\n
§Examples
\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nx.expect(\"Testing expect\"); // panics with `Testing expect: emergency failure`
\n
§Recommended Message Style
\n

We recommend that expect messages are used to describe the reason you\nexpect the Result should be Ok.

\n\n
let path = std::env::var(\"IMPORTANT_PATH\")\n    .expect(\"env variable `IMPORTANT_PATH` should be set by `wrapper_script.sh`\");
\n

Hint: If you’re having trouble remembering how to phrase expect\nerror messages remember to focus on the word “should” as in “env\nvariable should be set by blah” or “the given binary should be available\nand executable by the current user”.

\n

For more detail on expect message styles and the reasoning behind our recommendation please\nrefer to the section on “Common Message\nStyles” in the\nstd::error module docs.

\n
1.0.0 · source

pub fn unwrap(self) -> T
where\n E: Debug,

Returns the contained Ok value, consuming the self value.

\n

Because this function may panic, its use is generally discouraged.\nInstead, prefer to use pattern matching and handle the Err\ncase explicitly, or call unwrap_or, unwrap_or_else, or\nunwrap_or_default.

\n
§Panics
\n

Panics if the value is an Err, with a panic message provided by the\nErr’s value.

\n
§Examples
\n

Basic usage:

\n\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(x.unwrap(), 2);
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nx.unwrap(); // panics with `emergency failure`
\n
1.16.0 · source

pub fn unwrap_or_default(self) -> T
where\n T: Default,

Returns the contained Ok value or a default

\n

Consumes the self argument then, if Ok, returns the contained\nvalue, otherwise if Err, returns the default value for that\ntype.

\n
§Examples
\n

Converts a string to an integer, turning poorly-formed strings\ninto 0 (the default value for integers). parse converts\na string to any other type that implements FromStr, returning an\nErr on error.

\n\n
let good_year_from_input = \"1909\";\nlet bad_year_from_input = \"190blarg\";\nlet good_year = good_year_from_input.parse().unwrap_or_default();\nlet bad_year = bad_year_from_input.parse().unwrap_or_default();\n\nassert_eq!(1909, good_year);\nassert_eq!(0, bad_year);
\n
1.17.0 · source

pub fn expect_err(self, msg: &str) -> E
where\n T: Debug,

Returns the contained Err value, consuming the self value.

\n
§Panics
\n

Panics if the value is an Ok, with a panic message including the\npassed message, and the content of the Ok.

\n
§Examples
\n
let x: Result<u32, &str> = Ok(10);\nx.expect_err(\"Testing expect_err\"); // panics with `Testing expect_err: 10`
\n
1.0.0 · source

pub fn unwrap_err(self) -> E
where\n T: Debug,

Returns the contained Err value, consuming the self value.

\n
§Panics
\n

Panics if the value is an Ok, with a custom panic message provided\nby the Ok’s value.

\n
§Examples
\n
let x: Result<u32, &str> = Ok(2);\nx.unwrap_err(); // panics with `2`
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nassert_eq!(x.unwrap_err(), \"emergency failure\");
\n
source

pub fn into_ok(self) -> T
where\n E: Into<!>,

🔬This is a nightly-only experimental API. (unwrap_infallible)

Returns the contained Ok value, but never panics.

\n

Unlike unwrap, this method is known to never panic on the\nresult types it is implemented for. Therefore, it can be used\ninstead of unwrap as a maintainability safeguard that will fail\nto compile if the error type of the Result is later changed\nto an error that can actually occur.

\n
§Examples
\n
\nfn only_good_news() -> Result<String, !> {\n    Ok(\"this is fine\".into())\n}\n\nlet s: String = only_good_news().into_ok();\nprintln!(\"{s}\");
\n
source

pub fn into_err(self) -> E
where\n T: Into<!>,

🔬This is a nightly-only experimental API. (unwrap_infallible)

Returns the contained Err value, but never panics.

\n

Unlike unwrap_err, this method is known to never panic on the\nresult types it is implemented for. Therefore, it can be used\ninstead of unwrap_err as a maintainability safeguard that will fail\nto compile if the ok type of the Result is later changed\nto a type that can actually occur.

\n
§Examples
\n
\nfn only_bad_news() -> Result<!, String> {\n    Err(\"Oops, it failed\".into())\n}\n\nlet error: String = only_bad_news().into_err();\nprintln!(\"{error}\");
\n
1.0.0 · source

pub fn and<U>(self, res: Result<U, E>) -> Result<U, E>

Returns res if the result is Ok, otherwise returns the Err value of self.

\n

Arguments passed to and are eagerly evaluated; if you are passing the\nresult of a function call, it is recommended to use and_then, which is\nlazily evaluated.

\n
§Examples
\n
let x: Result<u32, &str> = Ok(2);\nlet y: Result<&str, &str> = Err(\"late error\");\nassert_eq!(x.and(y), Err(\"late error\"));\n\nlet x: Result<u32, &str> = Err(\"early error\");\nlet y: Result<&str, &str> = Ok(\"foo\");\nassert_eq!(x.and(y), Err(\"early error\"));\n\nlet x: Result<u32, &str> = Err(\"not a 2\");\nlet y: Result<&str, &str> = Err(\"late error\");\nassert_eq!(x.and(y), Err(\"not a 2\"));\n\nlet x: Result<u32, &str> = Ok(2);\nlet y: Result<&str, &str> = Ok(\"different result type\");\nassert_eq!(x.and(y), Ok(\"different result type\"));
\n
1.0.0 · source

pub fn and_then<U, F>(self, op: F) -> Result<U, E>
where\n F: FnOnce(T) -> Result<U, E>,

Calls op if the result is Ok, otherwise returns the Err value of self.

\n

This function can be used for control flow based on Result values.

\n
§Examples
\n
fn sq_then_to_string(x: u32) -> Result<String, &'static str> {\n    x.checked_mul(x).map(|sq| sq.to_string()).ok_or(\"overflowed\")\n}\n\nassert_eq!(Ok(2).and_then(sq_then_to_string), Ok(4.to_string()));\nassert_eq!(Ok(1_000_000).and_then(sq_then_to_string), Err(\"overflowed\"));\nassert_eq!(Err(\"not a number\").and_then(sq_then_to_string), Err(\"not a number\"));
\n

Often used to chain fallible operations that may return Err.

\n\n
use std::{io::ErrorKind, path::Path};\n\n// Note: on Windows \"/\" maps to \"C:\\\"\nlet root_modified_time = Path::new(\"/\").metadata().and_then(|md| md.modified());\nassert!(root_modified_time.is_ok());\n\nlet should_fail = Path::new(\"/bad/path\").metadata().and_then(|md| md.modified());\nassert!(should_fail.is_err());\nassert_eq!(should_fail.unwrap_err().kind(), ErrorKind::NotFound);
\n
1.0.0 · source

pub fn or<F>(self, res: Result<T, F>) -> Result<T, F>

Returns res if the result is Err, otherwise returns the Ok value of self.

\n

Arguments passed to or are eagerly evaluated; if you are passing the\nresult of a function call, it is recommended to use or_else, which is\nlazily evaluated.

\n
§Examples
\n
let x: Result<u32, &str> = Ok(2);\nlet y: Result<u32, &str> = Err(\"late error\");\nassert_eq!(x.or(y), Ok(2));\n\nlet x: Result<u32, &str> = Err(\"early error\");\nlet y: Result<u32, &str> = Ok(2);\nassert_eq!(x.or(y), Ok(2));\n\nlet x: Result<u32, &str> = Err(\"not a 2\");\nlet y: Result<u32, &str> = Err(\"late error\");\nassert_eq!(x.or(y), Err(\"late error\"));\n\nlet x: Result<u32, &str> = Ok(2);\nlet y: Result<u32, &str> = Ok(100);\nassert_eq!(x.or(y), Ok(2));
\n
1.0.0 · source

pub fn or_else<F, O>(self, op: O) -> Result<T, F>
where\n O: FnOnce(E) -> Result<T, F>,

Calls op if the result is Err, otherwise returns the Ok value of self.

\n

This function can be used for control flow based on result values.

\n
§Examples
\n
fn sq(x: u32) -> Result<u32, u32> { Ok(x * x) }\nfn err(x: u32) -> Result<u32, u32> { Err(x) }\n\nassert_eq!(Ok(2).or_else(sq).or_else(sq), Ok(2));\nassert_eq!(Ok(2).or_else(err).or_else(sq), Ok(2));\nassert_eq!(Err(3).or_else(sq).or_else(err), Ok(9));\nassert_eq!(Err(3).or_else(err).or_else(err), Err(3));
\n
1.0.0 · source

pub fn unwrap_or(self, default: T) -> T

Returns the contained Ok value or a provided default.

\n

Arguments passed to unwrap_or are eagerly evaluated; if you are passing\nthe result of a function call, it is recommended to use unwrap_or_else,\nwhich is lazily evaluated.

\n
§Examples
\n
let default = 2;\nlet x: Result<u32, &str> = Ok(9);\nassert_eq!(x.unwrap_or(default), 9);\n\nlet x: Result<u32, &str> = Err(\"error\");\nassert_eq!(x.unwrap_or(default), default);
\n
1.0.0 · source

pub fn unwrap_or_else<F>(self, op: F) -> T
where\n F: FnOnce(E) -> T,

Returns the contained Ok value or computes it from a closure.

\n
§Examples
\n
fn count(x: &str) -> usize { x.len() }\n\nassert_eq!(Ok(2).unwrap_or_else(count), 2);\nassert_eq!(Err(\"foo\").unwrap_or_else(count), 3);
\n
1.58.0 · source

pub unsafe fn unwrap_unchecked(self) -> T

Returns the contained Ok value, consuming the self value,\nwithout checking that the value is not an Err.

\n
§Safety
\n

Calling this method on an Err is undefined behavior.

\n
§Examples
\n
let x: Result<u32, &str> = Ok(2);\nassert_eq!(unsafe { x.unwrap_unchecked() }, 2);
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nunsafe { x.unwrap_unchecked(); } // Undefined behavior!
\n
1.58.0 · source

pub unsafe fn unwrap_err_unchecked(self) -> E

Returns the contained Err value, consuming the self value,\nwithout checking that the value is not an Ok.

\n
§Safety
\n

Calling this method on an Ok is undefined behavior.

\n
§Examples
\n
let x: Result<u32, &str> = Ok(2);\nunsafe { x.unwrap_err_unchecked() }; // Undefined behavior!
\n\n
let x: Result<u32, &str> = Err(\"emergency failure\");\nassert_eq!(unsafe { x.unwrap_err_unchecked() }, \"emergency failure\");
\n
",0,"echonet::protocol::result::Result"],["
source§

impl<T, E> Result<&T, E>

1.59.0 · source

pub fn copied(self) -> Result<T, E>
where\n T: Copy,

Maps a Result<&T, E> to a Result<T, E> by copying the contents of the\nOk part.

\n
§Examples
\n
let val = 12;\nlet x: Result<&i32, i32> = Ok(&val);\nassert_eq!(x, Ok(&12));\nlet copied = x.copied();\nassert_eq!(copied, Ok(12));
\n
1.59.0 · source

pub fn cloned(self) -> Result<T, E>
where\n T: Clone,

Maps a Result<&T, E> to a Result<T, E> by cloning the contents of the\nOk part.

\n
§Examples
\n
let val = 12;\nlet x: Result<&i32, i32> = Ok(&val);\nassert_eq!(x, Ok(&12));\nlet cloned = x.cloned();\nassert_eq!(cloned, Ok(12));
\n
",0,"echonet::protocol::result::Result"],["
source§

impl<T, E> Result<&mut T, E>

1.59.0 · source

pub fn copied(self) -> Result<T, E>
where\n T: Copy,

Maps a Result<&mut T, E> to a Result<T, E> by copying the contents of the\nOk part.

\n
§Examples
\n
let mut val = 12;\nlet x: Result<&mut i32, i32> = Ok(&mut val);\nassert_eq!(x, Ok(&mut 12));\nlet copied = x.copied();\nassert_eq!(copied, Ok(12));
\n
1.59.0 · source

pub fn cloned(self) -> Result<T, E>
where\n T: Clone,

Maps a Result<&mut T, E> to a Result<T, E> by cloning the contents of the\nOk part.

\n
§Examples
\n
let mut val = 12;\nlet x: Result<&mut i32, i32> = Ok(&mut val);\nassert_eq!(x, Ok(&mut 12));\nlet cloned = x.cloned();\nassert_eq!(cloned, Ok(12));
\n
",0,"echonet::protocol::result::Result"],["
source§

impl<T, E> Result<Option<T>, E>

1.33.0 (const: unstable) · source

pub fn transpose(self) -> Option<Result<T, E>>

Transposes a Result of an Option into an Option of a Result.

\n

Ok(None) will be mapped to None.\nOk(Some(_)) and Err(_) will be mapped to Some(Ok(_)) and Some(Err(_)).

\n
§Examples
\n
#[derive(Debug, Eq, PartialEq)]\nstruct SomeErr;\n\nlet x: Result<Option<i32>, SomeErr> = Ok(Some(5));\nlet y: Option<Result<i32, SomeErr>> = Some(Ok(5));\nassert_eq!(x.transpose(), y);
\n
",0,"echonet::protocol::result::Result"],["
source§

impl<T, E> Result<Result<T, E>, E>

source

pub fn flatten(self) -> Result<T, E>

🔬This is a nightly-only experimental API. (result_flattening)

Converts from Result<Result<T, E>, E> to Result<T, E>

\n
§Examples
\n
#![feature(result_flattening)]\nlet x: Result<Result<&'static str, u32>, u32> = Ok(Ok(\"hello\"));\nassert_eq!(Ok(\"hello\"), x.flatten());\n\nlet x: Result<Result<&'static str, u32>, u32> = Ok(Err(6));\nassert_eq!(Err(6), x.flatten());\n\nlet x: Result<Result<&'static str, u32>, u32> = Err(6);\nassert_eq!(Err(6), x.flatten());
\n

Flattening only removes one level of nesting at a time:

\n\n
#![feature(result_flattening)]\nlet x: Result<Result<Result<&'static str, u32>, u32>, u32> = Ok(Ok(Ok(\"hello\")));\nassert_eq!(Ok(Ok(\"hello\")), x.flatten());\nassert_eq!(Ok(\"hello\"), x.flatten().flatten());
\n
",0,"echonet::protocol::result::Result"],["
1.61.0 · source§

impl<T, E> Termination for Result<T, E>
where\n T: Termination,\n E: Debug,

source§

fn report(self) -> ExitCode

Is called to get the representation of the value as status code.\nThis status code is returned to the operating system.
","Termination","echonet::protocol::result::Result"],["
1.0.0 · source§

impl<T, E> PartialOrd for Result<T, E>
where\n T: PartialOrd,\n E: PartialOrd,

source§

fn partial_cmp(&self, other: &Result<T, E>) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
","PartialOrd","echonet::protocol::result::Result"],["
1.0.0 · source§

impl<A, E, V> FromIterator<Result<A, E>> for Result<V, E>
where\n V: FromIterator<A>,

source§

fn from_iter<I>(iter: I) -> Result<V, E>
where\n I: IntoIterator<Item = Result<A, E>>,

Takes each element in the Iterator: if it is an Err, no further\nelements are taken, and the Err is returned. Should no Err occur, a\ncontainer with the values of each Result is returned.

\n

Here is an example which increments every integer in a vector,\nchecking for overflow:

\n\n
let v = vec![1, 2];\nlet res: Result<Vec<u32>, &'static str> = v.iter().map(|x: &u32|\n    x.checked_add(1).ok_or(\"Overflow!\")\n).collect();\nassert_eq!(res, Ok(vec![2, 3]));
\n

Here is another example that tries to subtract one from another list\nof integers, this time checking for underflow:

\n\n
let v = vec![1, 2, 0];\nlet res: Result<Vec<u32>, &'static str> = v.iter().map(|x: &u32|\n    x.checked_sub(1).ok_or(\"Underflow!\")\n).collect();\nassert_eq!(res, Err(\"Underflow!\"));
\n

Here is a variation on the previous example, showing that no\nfurther elements are taken from iter after the first Err.

\n\n
let v = vec![3, 2, 1, 10];\nlet mut shared = 0;\nlet res: Result<Vec<u32>, &'static str> = v.iter().map(|x: &u32| {\n    shared += x;\n    x.checked_sub(2).ok_or(\"Underflow!\")\n}).collect();\nassert_eq!(res, Err(\"Underflow!\"));\nassert_eq!(shared, 6);
\n

Since the third element caused an underflow, no further elements were taken,\nso the final value of shared is 6 (= 3 + 2 + 1), not 16.

\n
","FromIterator>","echonet::protocol::result::Result"],["
1.0.0 · source§

impl<T, E> Hash for Result<T, E>
where\n T: Hash,\n E: Hash,

source§

fn hash<__H>(&self, state: &mut __H)
where\n __H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where\n H: Hasher,\n Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
","Hash","echonet::protocol::result::Result"],["
1.0.0 · source§

impl<T, E> Clone for Result<T, E>
where\n T: Clone,\n E: Clone,

source§

fn clone(&self) -> Result<T, E>

Returns a copy of the value. Read more
source§

fn clone_from(&mut self, source: &Result<T, E>)

Performs copy-assignment from source. Read more
","Clone","echonet::protocol::result::Result"],["
source§

impl<T, E> Residual<T> for Result<Infallible, E>

§

type TryType = Result<T, E>

🔬This is a nightly-only experimental API. (try_trait_v2_residual)
The “return” type of this meta-function.
","Residual","echonet::protocol::result::Result"],["
1.0.0 · source§

impl<T, E> IntoIterator for Result<T, E>

source§

fn into_iter(self) -> IntoIter<T>

Returns a consuming iterator over the possibly contained value.

\n

The iterator yields one value if the result is Result::Ok, otherwise none.

\n
§Examples
\n
let x: Result<u32, &str> = Ok(5);\nlet v: Vec<u32> = x.into_iter().collect();\nassert_eq!(v, [5]);\n\nlet x: Result<u32, &str> = Err(\"nothing!\");\nlet v: Vec<u32> = x.into_iter().collect();\nassert_eq!(v, []);
\n
§

type Item = T

The type of the elements being iterated over.
§

type IntoIter = IntoIter<T>

Which kind of iterator are we turning this into?
","IntoIterator","echonet::protocol::result::Result"],["
1.0.0 · source§

impl<T, E> StructuralPartialEq for Result<T, E>

","StructuralPartialEq","echonet::protocol::result::Result"],["
1.0.0 · source§

impl<T, E> Debug for Result<T, E>
where\n T: Debug,\n E: Debug,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
","Debug","echonet::protocol::result::Result"],["
1.0.0 · source§

impl<T, E> Eq for Result<T, E>
where\n T: Eq,\n E: Eq,

","Eq","echonet::protocol::result::Result"],["
1.16.0 · source§

impl<T, U, E> Sum<Result<U, E>> for Result<T, E>
where\n T: Sum<U>,

source§

fn sum<I>(iter: I) -> Result<T, E>
where\n I: Iterator<Item = Result<U, E>>,

Takes each element in the Iterator: if it is an Err, no further\nelements are taken, and the Err is returned. Should no Err\noccur, the sum of all elements is returned.

\n
§Examples
\n

This sums up every integer in a vector, rejecting the sum if a negative\nelement is encountered:

\n\n
let f = |&x: &i32| if x < 0 { Err(\"Negative element found\") } else { Ok(x) };\nlet v = vec![1, 2];\nlet res: Result<i32, _> = v.iter().map(f).sum();\nassert_eq!(res, Ok(3));\nlet v = vec![1, -2];\nlet res: Result<i32, _> = v.iter().map(f).sum();\nassert_eq!(res, Err(\"Negative element found\"));
\n
","Sum>","echonet::protocol::result::Result"],["
1.0.0 · source§

impl<T, E> Ord for Result<T, E>
where\n T: Ord,\n E: Ord,

source§

fn cmp(&self, other: &Result<T, E>) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where\n Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where\n Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
","Ord","echonet::protocol::result::Result"],["
1.0.0 · source§

impl<T, E> Copy for Result<T, E>
where\n T: Copy,\n E: Copy,

","Copy","echonet::protocol::result::Result"],["
1.0.0 · source§

impl<T, E> PartialEq for Result<T, E>
where\n T: PartialEq,\n E: PartialEq,

source§

fn eq(&self, other: &Result<T, E>) -> bool

This method tests for self and other values to be equal, and is used\nby ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
","PartialEq","echonet::protocol::result::Result"],["
source§

impl<T, E, F> FromResidual<Result<Infallible, E>> for Result<T, F>
where\n F: From<E>,

source§

fn from_residual(residual: Result<Infallible, E>) -> Result<T, F>

🔬This is a nightly-only experimental API. (try_trait_v2)
Constructs the type from a compatible Residual type. Read more
","FromResidual>","echonet::protocol::result::Result"],["
source§

impl<T, E, F> FromResidual<Yeet<E>> for Result<T, F>
where\n F: From<E>,

source§

fn from_residual(_: Yeet<E>) -> Result<T, F>

🔬This is a nightly-only experimental API. (try_trait_v2)
Constructs the type from a compatible Residual type. Read more
","FromResidual>","echonet::protocol::result::Result"],["
1.16.0 · source§

impl<T, U, E> Product<Result<U, E>> for Result<T, E>
where\n T: Product<U>,

source§

fn product<I>(iter: I) -> Result<T, E>
where\n I: Iterator<Item = Result<U, E>>,

Takes each element in the Iterator: if it is an Err, no further\nelements are taken, and the Err is returned. Should no Err\noccur, the product of all elements is returned.

\n
§Examples
\n

This multiplies each number in a vector of strings,\nif a string could not be parsed the operation returns Err:

\n\n
let nums = vec![\"5\", \"10\", \"1\", \"2\"];\nlet total: Result<usize, _> = nums.iter().map(|w| w.parse::<usize>()).product();\nassert_eq!(total, Ok(100));\nlet nums = vec![\"5\", \"10\", \"one\", \"2\"];\nlet total: Result<usize, _> = nums.iter().map(|w| w.parse::<usize>()).product();\nassert!(total.is_err());
\n
","Product>","echonet::protocol::result::Result"],["
source§

impl<T, E> Try for Result<T, E>

§

type Output = T

🔬This is a nightly-only experimental API. (try_trait_v2)
The type of the value produced by ? when not short-circuiting.
§

type Residual = Result<Infallible, E>

🔬This is a nightly-only experimental API. (try_trait_v2)
The type of the value passed to FromResidual::from_residual\nas part of ? when short-circuiting. Read more
source§

fn from_output(output: <Result<T, E> as Try>::Output) -> Result<T, E>

🔬This is a nightly-only experimental API. (try_trait_v2)
Constructs the type from its Output type. Read more
source§

fn branch(\n self\n) -> ControlFlow<<Result<T, E> as Try>::Residual, <Result<T, E> as Try>::Output>

🔬This is a nightly-only experimental API. (try_trait_v2)
Used in ? to decide whether the operator should produce a value\n(because this returned ControlFlow::Continue)\nor propagate a value back to the caller\n(because this returned ControlFlow::Break). Read more
","Try","echonet::protocol::result::Result"],["
source§

impl<T, E> Serialize for Result<T, E>
where\n T: Serialize,\n E: Serialize,

source§

fn serialize<S>(\n &self,\n serializer: S\n) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
where\n S: Serializer,

Serialize this value into the given Serde serializer. Read more
","Serialize","echonet::protocol::result::Result"],["
source§

impl<'de, T, E> Deserialize<'de> for Result<T, E>
where\n T: Deserialize<'de>,\n E: Deserialize<'de>,

source§

fn deserialize<D>(\n deserializer: D\n) -> Result<Result<T, E>, <D as Deserializer<'de>>::Error>
where\n D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
","Deserialize<'de>","echonet::protocol::result::Result"]] +};if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})() \ No newline at end of file diff --git a/type.impl/std/primitive.u16.js b/type.impl/std/primitive.u16.js new file mode 100644 index 00000000..a8009db9 --- /dev/null +++ b/type.impl/std/primitive.u16.js @@ -0,0 +1,3 @@ +(function() {var type_impls = { +"echonet":[] +};if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})() \ No newline at end of file diff --git a/type.impl/std/primitive.u32.js b/type.impl/std/primitive.u32.js new file mode 100644 index 00000000..a8009db9 --- /dev/null +++ b/type.impl/std/primitive.u32.js @@ -0,0 +1,3 @@ +(function() {var type_impls = { +"echonet":[] +};if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})() \ No newline at end of file diff --git a/type.impl/std/primitive.u8.js b/type.impl/std/primitive.u8.js new file mode 100644 index 00000000..a8009db9 --- /dev/null +++ b/type.impl/std/primitive.u8.js @@ -0,0 +1,3 @@ +(function() {var type_impls = { +"echonet":[] +};if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})() \ No newline at end of file diff --git a/uechobench/all.html b/uechobench/all.html new file mode 100644 index 00000000..be1abbc2 --- /dev/null +++ b/uechobench/all.html @@ -0,0 +1,2 @@ +List of all items in this crate +

List of all items

Functions

\ No newline at end of file diff --git a/uechobench/fn.main.html b/uechobench/fn.main.html new file mode 100644 index 00000000..28833493 --- /dev/null +++ b/uechobench/fn.main.html @@ -0,0 +1,2 @@ +main in uechobench - Rust +

Function uechobench::main

source ·
pub(crate) fn main() -> Result<(), Error>
\ No newline at end of file diff --git a/uechobench/fn.usages.html b/uechobench/fn.usages.html new file mode 100644 index 00000000..e09f1e1e --- /dev/null +++ b/uechobench/fn.usages.html @@ -0,0 +1,2 @@ +usages in uechobench - Rust +

Function uechobench::usages

source ·
pub(crate) fn usages()
\ No newline at end of file diff --git a/uechobench/index.html b/uechobench/index.html new file mode 100644 index 00000000..a42626c3 --- /dev/null +++ b/uechobench/index.html @@ -0,0 +1,3 @@ +uechobench - Rust +

Crate uechobench

source ·

Functions§

\ No newline at end of file diff --git a/uechobench/sidebar-items.js b/uechobench/sidebar-items.js new file mode 100644 index 00000000..8b57db79 --- /dev/null +++ b/uechobench/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"fn":["main","usages"]}; \ No newline at end of file diff --git a/uechopost/all.html b/uechopost/all.html new file mode 100644 index 00000000..df07c6d0 --- /dev/null +++ b/uechopost/all.html @@ -0,0 +1,2 @@ +List of all items in this crate +

List of all items

Functions

\ No newline at end of file diff --git a/uechopost/fn.main.html b/uechopost/fn.main.html new file mode 100644 index 00000000..bc418503 --- /dev/null +++ b/uechopost/fn.main.html @@ -0,0 +1,2 @@ +main in uechopost - Rust +

Function uechopost::main

source ·
pub(crate) fn main()
\ No newline at end of file diff --git a/uechopost/fn.usages.html b/uechopost/fn.usages.html new file mode 100644 index 00000000..ee0d1da8 --- /dev/null +++ b/uechopost/fn.usages.html @@ -0,0 +1,2 @@ +usages in uechopost - Rust +

Function uechopost::usages

source ·
pub(crate) fn usages()
\ No newline at end of file diff --git a/uechopost/index.html b/uechopost/index.html new file mode 100644 index 00000000..5cdabb61 --- /dev/null +++ b/uechopost/index.html @@ -0,0 +1,3 @@ +uechopost - Rust +

Crate uechopost

source ·

Functions§

\ No newline at end of file diff --git a/uechopost/sidebar-items.js b/uechopost/sidebar-items.js new file mode 100644 index 00000000..8b57db79 --- /dev/null +++ b/uechopost/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"fn":["main","usages"]}; \ No newline at end of file diff --git a/uechosearch/all.html b/uechosearch/all.html new file mode 100644 index 00000000..b4c86bf1 --- /dev/null +++ b/uechosearch/all.html @@ -0,0 +1,2 @@ +List of all items in this crate +

List of all items

Functions

\ No newline at end of file diff --git a/uechosearch/fn.main.html b/uechosearch/fn.main.html new file mode 100644 index 00000000..9cd9466a --- /dev/null +++ b/uechosearch/fn.main.html @@ -0,0 +1,2 @@ +main in uechosearch - Rust +

Function uechosearch::main

source ·
pub(crate) fn main() -> Result<(), Error>
\ No newline at end of file diff --git a/uechosearch/fn.usages.html b/uechosearch/fn.usages.html new file mode 100644 index 00000000..484f145a --- /dev/null +++ b/uechosearch/fn.usages.html @@ -0,0 +1,2 @@ +usages in uechosearch - Rust +

Function uechosearch::usages

source ·
pub(crate) fn usages()
\ No newline at end of file diff --git a/uechosearch/index.html b/uechosearch/index.html new file mode 100644 index 00000000..314aa32e --- /dev/null +++ b/uechosearch/index.html @@ -0,0 +1,3 @@ +uechosearch - Rust +

Crate uechosearch

source ·

Functions§

\ No newline at end of file diff --git a/uechosearch/sidebar-items.js b/uechosearch/sidebar-items.js new file mode 100644 index 00000000..8b57db79 --- /dev/null +++ b/uechosearch/sidebar-items.js @@ -0,0 +1 @@ +window.SIDEBAR_ITEMS = {"fn":["main","usages"]}; \ No newline at end of file