From 2c98526c0b72a5b6a774fd713295442d2e394232 Mon Sep 17 00:00:00 2001 From: nilclass Date: Sat, 18 Nov 2023 12:10:52 +0000 Subject: [PATCH] deploy: 68792edb121db65e724653cf61159ad9067f2e24 --- doc/help.html | 2 +- doc/implementors/core/clone/trait.Clone.js | 2 +- doc/implementors/core/cmp/trait.Eq.js | 2 +- doc/implementors/core/cmp/trait.Ord.js | 2 +- doc/implementors/core/cmp/trait.PartialEq.js | 2 +- doc/implementors/core/cmp/trait.PartialOrd.js | 2 +- doc/implementors/core/convert/trait.From.js | 2 +- .../core/convert/trait.TryFrom.js | 2 +- .../core/default/trait.Default.js | 2 +- doc/implementors/core/fmt/trait.Binary.js | 2 +- doc/implementors/core/fmt/trait.Debug.js | 2 +- doc/implementors/core/fmt/trait.LowerHex.js | 2 +- doc/implementors/core/fmt/trait.Octal.js | 2 +- doc/implementors/core/fmt/trait.UpperHex.js | 2 +- doc/implementors/core/hash/trait.Hash.js | 2 +- .../core/iter/traits/collect/trait.Extend.js | 2 +- .../iter/traits/collect/trait.FromIterator.js | 2 +- doc/implementors/core/marker/trait.Copy.js | 2 +- doc/implementors/core/marker/trait.Freeze.js | 2 +- doc/implementors/core/marker/trait.Send.js | 2 +- .../core/marker/trait.StructuralEq.js | 2 +- .../core/marker/trait.StructuralPartialEq.js | 2 +- doc/implementors/core/marker/trait.Sync.js | 2 +- doc/implementors/core/marker/trait.Unpin.js | 2 +- doc/implementors/core/ops/arith/trait.Sub.js | 2 +- .../core/ops/arith/trait.SubAssign.js | 2 +- doc/implementors/core/ops/bit/trait.BitAnd.js | 2 +- .../core/ops/bit/trait.BitAndAssign.js | 2 +- doc/implementors/core/ops/bit/trait.BitOr.js | 2 +- .../core/ops/bit/trait.BitOrAssign.js | 2 +- doc/implementors/core/ops/bit/trait.BitXor.js | 2 +- .../core/ops/bit/trait.BitXorAssign.js | 2 +- doc/implementors/core/ops/bit/trait.Not.js | 2 +- .../panic/unwind_safe/trait.RefUnwindSafe.js | 2 +- .../panic/unwind_safe/trait.UnwindSafe.js | 2 +- doc/implementors/defmt/traits/trait.Format.js | 2 +- doc/search-index.js | 2 +- doc/settings.html | 2 +- doc/{source-files.js => src-files.js} | 4 +- doc/src/usbh/bus.rs.html | 4 +- doc/src/usbh/descriptor.rs.html | 2 +- doc/src/usbh/discovery.rs.html | 2 +- doc/src/usbh/driver.rs.html | 2 +- doc/src/usbh/driver/detector.rs.html | 2 +- doc/src/usbh/driver/hub.rs.html | 2 +- doc/src/usbh/driver/kbd.rs.html | 2 +- doc/src/usbh/driver/log.rs.html | 2 +- doc/src/usbh/enumeration.rs.html | 2 +- doc/src/usbh/enumerator.rs.html | 2 +- doc/src/usbh/lib.rs.html | 2 +- doc/src/usbh/transfer.rs.html | 2 +- doc/src/usbh/types.rs.html | 2 +- ...28113ac93.css => ayu-fd19013d6ce078bf.css} | 2 +- ...2a01e3cf.css => dark-0a43001d3fc2282c.css} | 2 +- ...7f9eb3e.css => light-1596385f77d47ef2.css} | 2 +- doc/static.files/main-0795b7d26be81095.js | 12 +++ doc/static.files/main-f0540c1d82cde29b.js | 7 -- .../noscript-13285aec31fa243e.css | 1 - .../noscript-cffde32267a19fd6.css | 1 + doc/static.files/rustdoc-cb6f1f67f1bcd037.css | 8 ++ doc/static.files/rustdoc-f3501f0f5ae15dfb.css | 8 -- doc/static.files/search-4926e5fc22a5646a.js | 1 - doc/static.files/search-6dfdfced5eff6596.js | 5 + .../source-script-11255107d0a65077.js | 1 - .../src-script-3280b574d94e47b4.js | 1 + doc/static.files/storage-62ce34ea385b278a.js | 1 - doc/static.files/storage-db41da1a38ea3cb8.js | 1 + doc/usbh/all.html | 2 +- doc/usbh/bus/enum.Error.html | 26 ++--- doc/usbh/bus/enum.Event.html | 30 +++--- doc/usbh/bus/index.html | 2 +- doc/usbh/bus/struct.InterruptPipe.html | 30 +++--- doc/usbh/bus/trait.HostBus.html | 80 ++++++++-------- .../constant.TYPE_CONFIGURATION.html | 2 +- doc/usbh/descriptor/constant.TYPE_DEVICE.html | 2 +- .../descriptor/constant.TYPE_ENDPOINT.html | 2 +- .../descriptor/constant.TYPE_INTERFACE.html | 2 +- doc/usbh/descriptor/constant.TYPE_STRING.html | 2 +- .../descriptor/enum.SynchronizationType.html | 22 ++--- doc/usbh/descriptor/enum.UsageType.html | 22 ++--- doc/usbh/descriptor/index.html | 2 +- .../descriptor/parse/fn.any_descriptor.html | 2 +- doc/usbh/descriptor/parse/fn.bcd_16.html | 2 +- .../parse/fn.configuration_descriptor.html | 6 +- .../fn.configuration_descriptor_length.html | 2 +- .../parse/fn.device_descriptor.html | 2 +- .../parse/fn.endpoint_descriptor.html | 2 +- .../parse/fn.interface_descriptor.html | 2 +- doc/usbh/descriptor/parse/index.html | 2 +- .../struct.ConfigurationAttributes.html | 26 ++--- .../struct.ConfigurationDescriptor.html | 42 ++++---- doc/usbh/descriptor/struct.Descriptor.html | 34 +++---- .../descriptor/struct.DeviceDescriptor.html | 62 ++++++------ .../descriptor/struct.EndpointAddress.html | 26 ++--- .../descriptor/struct.EndpointAttributes.html | 26 ++--- .../descriptor/struct.EndpointDescriptor.html | 30 +++--- .../struct.InterfaceDescriptor.html | 50 +++++----- doc/usbh/driver/detector/index.html | 2 +- .../detector/struct.SimpleDetector.html | 33 ++++--- doc/usbh/driver/hub/enum.HubError.html | 22 ++--- doc/usbh/driver/hub/enum.HubEvent.html | 30 +++--- doc/usbh/driver/hub/enum.PortFeature.html | 26 ++--- doc/usbh/driver/hub/index.html | 2 +- .../driver/hub/struct.Characteristics.html | 20 ++-- .../driver/hub/struct.DeviceRemovable.html | 20 ++-- doc/usbh/driver/hub/struct.HubDescriptor.html | 28 +++--- doc/usbh/driver/hub/struct.HubDriver.html | 62 ++++++------ doc/usbh/driver/hub/struct.HubStatus.html | 20 ++-- doc/usbh/driver/hub/struct.PortStatus.html | 94 +++++++++--------- doc/usbh/driver/index.html | 2 +- doc/usbh/driver/kbd/enum.KbdError.html | 22 ++--- doc/usbh/driver/kbd/enum.KbdEvent.html | 22 ++--- doc/usbh/driver/kbd/enum.KbdLed.html | 22 ++--- doc/usbh/driver/kbd/index.html | 2 +- doc/usbh/driver/kbd/struct.InputReport.html | 24 ++--- doc/usbh/driver/kbd/struct.KbdDriver.html | 60 ++++++------ .../driver/kbd/struct.ModifierStatus.html | 36 +++---- doc/usbh/driver/log/index.html | 2 +- doc/usbh/driver/log/struct.EventMask.html | 96 +++++++++---------- doc/usbh/driver/log/struct.LogDriver.html | 46 ++++----- doc/usbh/driver/trait.Driver.html | 48 +++++----- doc/usbh/enum.ControlError.html | 26 ++--- doc/usbh/enum.Event.html | 28 +++--- doc/usbh/enum.PollResult.html | 22 ++--- doc/usbh/index.html | 2 +- doc/usbh/struct.PipeId.html | 26 ++--- doc/usbh/struct.UsbHost.html | 90 ++++++++--------- doc/usbh/types/enum.ConnectionSpeed.html | 26 ++--- doc/usbh/types/enum.TransferType.html | 26 ++--- doc/usbh/types/index.html | 2 +- doc/usbh/types/struct.Bcd16.html | 28 +++--- doc/usbh/types/struct.DeviceAddress.html | 26 ++--- doc/usbh/types/struct.SetupPacket.html | 42 ++++---- 133 files changed, 898 insertions(+), 890 deletions(-) rename doc/{source-files.js => src-files.js} (77%) rename doc/static.files/{ayu-614652228113ac93.css => ayu-fd19013d6ce078bf.css} (63%) rename doc/static.files/{dark-1097f8e92a01e3cf.css => dark-0a43001d3fc2282c.css} (68%) rename doc/static.files/{light-0f8c037637f9eb3e.css => light-1596385f77d47ef2.css} (68%) create mode 100644 doc/static.files/main-0795b7d26be81095.js delete mode 100644 doc/static.files/main-f0540c1d82cde29b.js delete mode 100644 doc/static.files/noscript-13285aec31fa243e.css create mode 100644 doc/static.files/noscript-cffde32267a19fd6.css create mode 100644 doc/static.files/rustdoc-cb6f1f67f1bcd037.css delete mode 100644 doc/static.files/rustdoc-f3501f0f5ae15dfb.css delete mode 100644 doc/static.files/search-4926e5fc22a5646a.js create mode 100644 doc/static.files/search-6dfdfced5eff6596.js delete mode 100644 doc/static.files/source-script-11255107d0a65077.js create mode 100644 doc/static.files/src-script-3280b574d94e47b4.js delete mode 100644 doc/static.files/storage-62ce34ea385b278a.js create mode 100644 doc/static.files/storage-db41da1a38ea3cb8.js diff --git a/doc/help.html b/doc/help.html index 8be4711..c894fce 100644 --- a/doc/help.html +++ b/doc/help.html @@ -1 +1 @@ -Rustdoc help

Rustdoc help

Back
\ No newline at end of file +Rustdoc help

Rustdoc help

Back
\ No newline at end of file diff --git a/doc/implementors/core/clone/trait.Clone.js b/doc/implementors/core/clone/trait.Clone.js index 9e97c45..08a5e26 100644 --- a/doc/implementors/core/clone/trait.Clone.js +++ b/doc/implementors/core/clone/trait.Clone.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl Clone for ControlError"],["impl Clone for TransferType"],["impl Clone for HubStatus"],["impl Clone for KbdEvent"],["impl Clone for Error"],["impl Clone for HubError"],["impl Clone for Event"],["impl Clone for PortFeature"],["impl Clone for ConnectionSpeed"],["impl Clone for SynchronizationType"],["impl Clone for KbdError"],["impl Clone for InputReport"],["impl Clone for Event"],["impl Clone for PipeId"],["impl Clone for EventMask"],["impl Clone for HubDescriptor"],["impl Clone for PortStatus"],["impl Clone for ModifierStatus"],["impl Clone for EndpointAttributes"],["impl Clone for KbdLed"],["impl Clone for UsageType"],["impl Clone for Characteristics"],["impl Clone for EndpointAddress"],["impl Clone for Bcd16"],["impl Clone for ConfigurationAttributes"],["impl Clone for DeviceRemovable"],["impl Clone for HubEvent"],["impl Clone for DeviceAddress"]] +"usbh":[["impl Clone for PortFeature"],["impl Clone for Characteristics"],["impl Clone for KbdError"],["impl Clone for SynchronizationType"],["impl Clone for EventMask"],["impl Clone for ConfigurationAttributes"],["impl Clone for HubDescriptor"],["impl Clone for ControlError"],["impl Clone for PipeId"],["impl Clone for DeviceAddress"],["impl Clone for HubError"],["impl Clone for TransferType"],["impl Clone for KbdEvent"],["impl Clone for HubStatus"],["impl Clone for PortStatus"],["impl Clone for UsageType"],["impl Clone for ConnectionSpeed"],["impl Clone for ModifierStatus"],["impl Clone for Error"],["impl Clone for HubEvent"],["impl Clone for InputReport"],["impl Clone for EndpointAttributes"],["impl Clone for DeviceRemovable"],["impl Clone for EndpointAddress"],["impl Clone for Event"],["impl Clone for KbdLed"],["impl Clone for Bcd16"],["impl Clone for Event"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/cmp/trait.Eq.js b/doc/implementors/core/cmp/trait.Eq.js index 9f55f13..5cb015d 100644 --- a/doc/implementors/core/cmp/trait.Eq.js +++ b/doc/implementors/core/cmp/trait.Eq.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl Eq for EventMask"],["impl Eq for PortStatus"]] +"usbh":[["impl Eq for PortStatus"],["impl Eq for EventMask"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/cmp/trait.Ord.js b/doc/implementors/core/cmp/trait.Ord.js index 117316c..a2f520f 100644 --- a/doc/implementors/core/cmp/trait.Ord.js +++ b/doc/implementors/core/cmp/trait.Ord.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl Ord for PortStatus"],["impl Ord for EventMask"]] +"usbh":[["impl Ord for EventMask"],["impl Ord for PortStatus"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/cmp/trait.PartialEq.js b/doc/implementors/core/cmp/trait.PartialEq.js index a08923d..a1b32a7 100644 --- a/doc/implementors/core/cmp/trait.PartialEq.js +++ b/doc/implementors/core/cmp/trait.PartialEq.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl PartialEq<Error> for Error"],["impl PartialEq<ConnectionSpeed> for ConnectionSpeed"],["impl PartialEq<DeviceAddress> for DeviceAddress"],["impl PartialEq<PortStatus> for PortStatus"],["impl PartialEq<EventMask> for EventMask"],["impl PartialEq<ControlError> for ControlError"],["impl PartialEq<TransferType> for TransferType"],["impl PartialEq<PipeId> for PipeId"],["impl PartialEq<PortFeature> for PortFeature"],["impl PartialEq<Event> for Event"],["impl PartialEq<Bcd16> for Bcd16"]] +"usbh":[["impl PartialEq<Error> for Error"],["impl PartialEq<Event> for Event"],["impl PartialEq<TransferType> for TransferType"],["impl PartialEq<PipeId> for PipeId"],["impl PartialEq<ControlError> for ControlError"],["impl PartialEq<EventMask> for EventMask"],["impl PartialEq<PortStatus> for PortStatus"],["impl PartialEq<Bcd16> for Bcd16"],["impl PartialEq<PortFeature> for PortFeature"],["impl PartialEq<DeviceAddress> for DeviceAddress"],["impl PartialEq<ConnectionSpeed> for ConnectionSpeed"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/cmp/trait.PartialOrd.js b/doc/implementors/core/cmp/trait.PartialOrd.js index f91a966..a4c2b4f 100644 --- a/doc/implementors/core/cmp/trait.PartialOrd.js +++ b/doc/implementors/core/cmp/trait.PartialOrd.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl PartialOrd<PortStatus> for PortStatus"],["impl PartialOrd<EventMask> for EventMask"]] +"usbh":[["impl PartialOrd<PortStatus> for PortStatus"],["impl PartialOrd<EventMask> for EventMask"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/convert/trait.From.js b/doc/implementors/core/convert/trait.From.js index 9ca2d65..ad1e783 100644 --- a/doc/implementors/core/convert/trait.From.js +++ b/doc/implementors/core/convert/trait.From.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl From<DeviceAddress> for u8"],["impl From<ControlError> for KbdError"],["impl From<ControlError> for HubError"],["impl From<DeviceAddress> for u16"]] +"usbh":[["impl From<DeviceAddress> for u8"],["impl From<DeviceAddress> for u16"],["impl From<ControlError> for KbdError"],["impl From<ControlError> for HubError"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/convert/trait.TryFrom.js b/doc/implementors/core/convert/trait.TryFrom.js index 2e537a9..1faa93b 100644 --- a/doc/implementors/core/convert/trait.TryFrom.js +++ b/doc/implementors/core/convert/trait.TryFrom.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl<'a> TryFrom<&'a [u8]> for &'a InputReport"]] +"usbh":[["impl<'a> TryFrom<&'a [u8]> for &'a InputReport"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/default/trait.Default.js b/doc/implementors/core/default/trait.Default.js index f092d24..290f287 100644 --- a/doc/implementors/core/default/trait.Default.js +++ b/doc/implementors/core/default/trait.Default.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> Default for SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>"]] +"usbh":[["impl<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> Default for SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/fmt/trait.Binary.js b/doc/implementors/core/fmt/trait.Binary.js index e27afbe..d8cb2fb 100644 --- a/doc/implementors/core/fmt/trait.Binary.js +++ b/doc/implementors/core/fmt/trait.Binary.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl Binary for PortStatus"],["impl Binary for EventMask"]] +"usbh":[["impl Binary for PortStatus"],["impl Binary for EventMask"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/fmt/trait.Debug.js b/doc/implementors/core/fmt/trait.Debug.js index 060c57f..d718567 100644 --- a/doc/implementors/core/fmt/trait.Debug.js +++ b/doc/implementors/core/fmt/trait.Debug.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl Debug for PortStatus"],["impl Debug for EventMask"],["impl Debug for ModifierStatus"]] +"usbh":[["impl Debug for ModifierStatus"],["impl Debug for PortStatus"],["impl Debug for EventMask"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/fmt/trait.LowerHex.js b/doc/implementors/core/fmt/trait.LowerHex.js index 96d936e..eb323fe 100644 --- a/doc/implementors/core/fmt/trait.LowerHex.js +++ b/doc/implementors/core/fmt/trait.LowerHex.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl LowerHex for EventMask"],["impl LowerHex for PortStatus"]] +"usbh":[["impl LowerHex for EventMask"],["impl LowerHex for PortStatus"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/fmt/trait.Octal.js b/doc/implementors/core/fmt/trait.Octal.js index 973f85d..fb99fd6 100644 --- a/doc/implementors/core/fmt/trait.Octal.js +++ b/doc/implementors/core/fmt/trait.Octal.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl Octal for EventMask"],["impl Octal for PortStatus"]] +"usbh":[["impl Octal for PortStatus"],["impl Octal for EventMask"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/fmt/trait.UpperHex.js b/doc/implementors/core/fmt/trait.UpperHex.js index 3a0c2c6..6083883 100644 --- a/doc/implementors/core/fmt/trait.UpperHex.js +++ b/doc/implementors/core/fmt/trait.UpperHex.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl UpperHex for EventMask"],["impl UpperHex for PortStatus"]] +"usbh":[["impl UpperHex for EventMask"],["impl UpperHex for PortStatus"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/hash/trait.Hash.js b/doc/implementors/core/hash/trait.Hash.js index fa47d03..890a723 100644 --- a/doc/implementors/core/hash/trait.Hash.js +++ b/doc/implementors/core/hash/trait.Hash.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl Hash for EventMask"],["impl Hash for PortStatus"]] +"usbh":[["impl Hash for PortStatus"],["impl Hash for EventMask"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/iter/traits/collect/trait.Extend.js b/doc/implementors/core/iter/traits/collect/trait.Extend.js index 675bd04..d069e95 100644 --- a/doc/implementors/core/iter/traits/collect/trait.Extend.js +++ b/doc/implementors/core/iter/traits/collect/trait.Extend.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl Extend<EventMask> for EventMask"],["impl Extend<PortStatus> for PortStatus"]] +"usbh":[["impl Extend<PortStatus> for PortStatus"],["impl Extend<EventMask> for EventMask"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/iter/traits/collect/trait.FromIterator.js b/doc/implementors/core/iter/traits/collect/trait.FromIterator.js index 39a7404..756081e 100644 --- a/doc/implementors/core/iter/traits/collect/trait.FromIterator.js +++ b/doc/implementors/core/iter/traits/collect/trait.FromIterator.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl FromIterator<EventMask> for EventMask"],["impl FromIterator<PortStatus> for PortStatus"]] +"usbh":[["impl FromIterator<EventMask> for EventMask"],["impl FromIterator<PortStatus> for PortStatus"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/marker/trait.Copy.js b/doc/implementors/core/marker/trait.Copy.js index cbc871b..e6b18ff 100644 --- a/doc/implementors/core/marker/trait.Copy.js +++ b/doc/implementors/core/marker/trait.Copy.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl Copy for ConnectionSpeed"],["impl Copy for EventMask"],["impl Copy for Event"],["impl Copy for ConfigurationAttributes"],["impl Copy for KbdEvent"],["impl Copy for Bcd16"],["impl Copy for DeviceRemovable"],["impl Copy for PipeId"],["impl Copy for HubStatus"],["impl Copy for UsageType"],["impl Copy for HubEvent"],["impl Copy for Error"],["impl Copy for HubError"],["impl Copy for InputReport"],["impl Copy for TransferType"],["impl Copy for HubDescriptor"],["impl Copy for Event"],["impl Copy for SynchronizationType"],["impl Copy for PortStatus"],["impl Copy for ModifierStatus"],["impl Copy for EndpointAttributes"],["impl Copy for ControlError"],["impl Copy for PortFeature"],["impl Copy for EndpointAddress"],["impl Copy for KbdError"],["impl Copy for Characteristics"],["impl Copy for DeviceAddress"],["impl Copy for KbdLed"]] +"usbh":[["impl Copy for ConnectionSpeed"],["impl Copy for PortFeature"],["impl Copy for TransferType"],["impl Copy for PipeId"],["impl Copy for PortStatus"],["impl Copy for Event"],["impl Copy for KbdLed"],["impl Copy for HubEvent"],["impl Copy for EventMask"],["impl Copy for DeviceAddress"],["impl Copy for DeviceRemovable"],["impl Copy for EndpointAddress"],["impl Copy for Bcd16"],["impl Copy for Characteristics"],["impl Copy for HubDescriptor"],["impl Copy for HubStatus"],["impl Copy for KbdEvent"],["impl Copy for ConfigurationAttributes"],["impl Copy for SynchronizationType"],["impl Copy for InputReport"],["impl Copy for HubError"],["impl Copy for ModifierStatus"],["impl Copy for ControlError"],["impl Copy for Error"],["impl Copy for KbdError"],["impl Copy for Event"],["impl Copy for EndpointAttributes"],["impl Copy for UsageType"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/marker/trait.Freeze.js b/doc/implementors/core/marker/trait.Freeze.js index 73057bd..58dce97 100644 --- a/doc/implementors/core/marker/trait.Freeze.js +++ b/doc/implementors/core/marker/trait.Freeze.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl Freeze for InterruptPipe",1,["usbh::bus::InterruptPipe"]],["impl Freeze for Event",1,["usbh::bus::Event"]],["impl Freeze for Error",1,["usbh::bus::Error"]],["impl<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> Freeze for SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>",1,["usbh::driver::detector::SimpleDetector"]],["impl<const MAX_DEVICES: usize> Freeze for KbdDriver<MAX_DEVICES>",1,["usbh::driver::kbd::KbdDriver"]],["impl Freeze for InputReport",1,["usbh::driver::kbd::InputReport"]],["impl Freeze for ModifierStatus",1,["usbh::driver::kbd::ModifierStatus"]],["impl Freeze for KbdEvent",1,["usbh::driver::kbd::KbdEvent"]],["impl Freeze for KbdLed",1,["usbh::driver::kbd::KbdLed"]],["impl Freeze for KbdError",1,["usbh::driver::kbd::KbdError"]],["impl Freeze for LogDriver",1,["usbh::driver::log::LogDriver"]],["impl Freeze for EventMask",1,["usbh::driver::log::EventMask"]],["impl Freeze for HubDescriptor",1,["usbh::driver::hub::HubDescriptor"]],["impl Freeze for Characteristics",1,["usbh::driver::hub::Characteristics"]],["impl Freeze for DeviceRemovable",1,["usbh::driver::hub::DeviceRemovable"]],["impl Freeze for PortFeature",1,["usbh::driver::hub::PortFeature"]],["impl Freeze for HubEvent",1,["usbh::driver::hub::HubEvent"]],["impl Freeze for PortStatus",1,["usbh::driver::hub::PortStatus"]],["impl Freeze for HubStatus",1,["usbh::driver::hub::HubStatus"]],["impl Freeze for HubError",1,["usbh::driver::hub::HubError"]],["impl<const MAX_HUBS: usize> Freeze for HubDriver<MAX_HUBS>",1,["usbh::driver::hub::HubDriver"]],["impl Freeze for DeviceAddress",1,["usbh::types::DeviceAddress"]],["impl Freeze for Bcd16",1,["usbh::types::Bcd16"]],["impl Freeze for ConnectionSpeed",1,["usbh::types::ConnectionSpeed"]],["impl Freeze for TransferType",1,["usbh::types::TransferType"]],["impl Freeze for SetupPacket",1,["usbh::types::SetupPacket"]],["impl<'a> Freeze for Descriptor<'a>",1,["usbh::descriptor::Descriptor"]],["impl Freeze for DeviceDescriptor",1,["usbh::descriptor::DeviceDescriptor"]],["impl Freeze for ConfigurationDescriptor",1,["usbh::descriptor::ConfigurationDescriptor"]],["impl Freeze for ConfigurationAttributes",1,["usbh::descriptor::ConfigurationAttributes"]],["impl Freeze for InterfaceDescriptor",1,["usbh::descriptor::InterfaceDescriptor"]],["impl Freeze for EndpointDescriptor",1,["usbh::descriptor::EndpointDescriptor"]],["impl Freeze for EndpointAddress",1,["usbh::descriptor::EndpointAddress"]],["impl Freeze for EndpointAttributes",1,["usbh::descriptor::EndpointAttributes"]],["impl Freeze for SynchronizationType",1,["usbh::descriptor::SynchronizationType"]],["impl Freeze for UsageType",1,["usbh::descriptor::UsageType"]],["impl Freeze for ControlError",1,["usbh::ControlError"]],["impl Freeze for Event",1,["usbh::Event"]],["impl Freeze for PollResult",1,["usbh::PollResult"]],["impl<B> Freeze for UsbHost<B>where\n B: Freeze,",1,["usbh::UsbHost"]],["impl Freeze for PipeId",1,["usbh::PipeId"]]] +"usbh":[["impl Freeze for InterruptPipe",1,["usbh::bus::InterruptPipe"]],["impl Freeze for Event",1,["usbh::bus::Event"]],["impl Freeze for Error",1,["usbh::bus::Error"]],["impl<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> Freeze for SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>",1,["usbh::driver::detector::SimpleDetector"]],["impl<const MAX_DEVICES: usize> Freeze for KbdDriver<MAX_DEVICES>",1,["usbh::driver::kbd::KbdDriver"]],["impl Freeze for InputReport",1,["usbh::driver::kbd::InputReport"]],["impl Freeze for ModifierStatus",1,["usbh::driver::kbd::ModifierStatus"]],["impl Freeze for KbdEvent",1,["usbh::driver::kbd::KbdEvent"]],["impl Freeze for KbdLed",1,["usbh::driver::kbd::KbdLed"]],["impl Freeze for KbdError",1,["usbh::driver::kbd::KbdError"]],["impl Freeze for LogDriver",1,["usbh::driver::log::LogDriver"]],["impl Freeze for EventMask",1,["usbh::driver::log::EventMask"]],["impl Freeze for HubDescriptor",1,["usbh::driver::hub::HubDescriptor"]],["impl Freeze for Characteristics",1,["usbh::driver::hub::Characteristics"]],["impl Freeze for DeviceRemovable",1,["usbh::driver::hub::DeviceRemovable"]],["impl Freeze for PortFeature",1,["usbh::driver::hub::PortFeature"]],["impl Freeze for HubEvent",1,["usbh::driver::hub::HubEvent"]],["impl Freeze for PortStatus",1,["usbh::driver::hub::PortStatus"]],["impl Freeze for HubStatus",1,["usbh::driver::hub::HubStatus"]],["impl Freeze for HubError",1,["usbh::driver::hub::HubError"]],["impl<const MAX_HUBS: usize> Freeze for HubDriver<MAX_HUBS>",1,["usbh::driver::hub::HubDriver"]],["impl Freeze for DeviceAddress",1,["usbh::types::DeviceAddress"]],["impl Freeze for Bcd16",1,["usbh::types::Bcd16"]],["impl Freeze for ConnectionSpeed",1,["usbh::types::ConnectionSpeed"]],["impl Freeze for TransferType",1,["usbh::types::TransferType"]],["impl Freeze for SetupPacket",1,["usbh::types::SetupPacket"]],["impl<'a> Freeze for Descriptor<'a>",1,["usbh::descriptor::Descriptor"]],["impl Freeze for DeviceDescriptor",1,["usbh::descriptor::DeviceDescriptor"]],["impl Freeze for ConfigurationDescriptor",1,["usbh::descriptor::ConfigurationDescriptor"]],["impl Freeze for ConfigurationAttributes",1,["usbh::descriptor::ConfigurationAttributes"]],["impl Freeze for InterfaceDescriptor",1,["usbh::descriptor::InterfaceDescriptor"]],["impl Freeze for EndpointDescriptor",1,["usbh::descriptor::EndpointDescriptor"]],["impl Freeze for EndpointAddress",1,["usbh::descriptor::EndpointAddress"]],["impl Freeze for EndpointAttributes",1,["usbh::descriptor::EndpointAttributes"]],["impl Freeze for SynchronizationType",1,["usbh::descriptor::SynchronizationType"]],["impl Freeze for UsageType",1,["usbh::descriptor::UsageType"]],["impl Freeze for ControlError",1,["usbh::ControlError"]],["impl Freeze for Event",1,["usbh::Event"]],["impl Freeze for PollResult",1,["usbh::PollResult"]],["impl<B> Freeze for UsbHost<B>where\n B: Freeze,",1,["usbh::UsbHost"]],["impl Freeze for PipeId",1,["usbh::PipeId"]]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/marker/trait.Send.js b/doc/implementors/core/marker/trait.Send.js index 9b0da14..2cd4d55 100644 --- a/doc/implementors/core/marker/trait.Send.js +++ b/doc/implementors/core/marker/trait.Send.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl !Send for InterruptPipe",1,["usbh::bus::InterruptPipe"]],["impl Send for Event",1,["usbh::bus::Event"]],["impl Send for Error",1,["usbh::bus::Error"]],["impl<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> Send for SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>",1,["usbh::driver::detector::SimpleDetector"]],["impl<const MAX_DEVICES: usize> Send for KbdDriver<MAX_DEVICES>",1,["usbh::driver::kbd::KbdDriver"]],["impl Send for InputReport",1,["usbh::driver::kbd::InputReport"]],["impl Send for ModifierStatus",1,["usbh::driver::kbd::ModifierStatus"]],["impl Send for KbdEvent",1,["usbh::driver::kbd::KbdEvent"]],["impl Send for KbdLed",1,["usbh::driver::kbd::KbdLed"]],["impl Send for KbdError",1,["usbh::driver::kbd::KbdError"]],["impl Send for LogDriver",1,["usbh::driver::log::LogDriver"]],["impl Send for EventMask",1,["usbh::driver::log::EventMask"]],["impl Send for HubDescriptor",1,["usbh::driver::hub::HubDescriptor"]],["impl Send for Characteristics",1,["usbh::driver::hub::Characteristics"]],["impl Send for DeviceRemovable",1,["usbh::driver::hub::DeviceRemovable"]],["impl Send for PortFeature",1,["usbh::driver::hub::PortFeature"]],["impl Send for HubEvent",1,["usbh::driver::hub::HubEvent"]],["impl Send for PortStatus",1,["usbh::driver::hub::PortStatus"]],["impl Send for HubStatus",1,["usbh::driver::hub::HubStatus"]],["impl Send for HubError",1,["usbh::driver::hub::HubError"]],["impl<const MAX_HUBS: usize> Send for HubDriver<MAX_HUBS>",1,["usbh::driver::hub::HubDriver"]],["impl Send for DeviceAddress",1,["usbh::types::DeviceAddress"]],["impl Send for Bcd16",1,["usbh::types::Bcd16"]],["impl Send for ConnectionSpeed",1,["usbh::types::ConnectionSpeed"]],["impl Send for TransferType",1,["usbh::types::TransferType"]],["impl Send for SetupPacket",1,["usbh::types::SetupPacket"]],["impl<'a> Send for Descriptor<'a>",1,["usbh::descriptor::Descriptor"]],["impl Send for DeviceDescriptor",1,["usbh::descriptor::DeviceDescriptor"]],["impl Send for ConfigurationDescriptor",1,["usbh::descriptor::ConfigurationDescriptor"]],["impl Send for ConfigurationAttributes",1,["usbh::descriptor::ConfigurationAttributes"]],["impl Send for InterfaceDescriptor",1,["usbh::descriptor::InterfaceDescriptor"]],["impl Send for EndpointDescriptor",1,["usbh::descriptor::EndpointDescriptor"]],["impl Send for EndpointAddress",1,["usbh::descriptor::EndpointAddress"]],["impl Send for EndpointAttributes",1,["usbh::descriptor::EndpointAttributes"]],["impl Send for SynchronizationType",1,["usbh::descriptor::SynchronizationType"]],["impl Send for UsageType",1,["usbh::descriptor::UsageType"]],["impl Send for ControlError",1,["usbh::ControlError"]],["impl Send for Event",1,["usbh::Event"]],["impl Send for PollResult",1,["usbh::PollResult"]],["impl<B> Send for UsbHost<B>where\n B: Send,",1,["usbh::UsbHost"]],["impl Send for PipeId",1,["usbh::PipeId"]]] +"usbh":[["impl !Send for InterruptPipe",1,["usbh::bus::InterruptPipe"]],["impl Send for Event",1,["usbh::bus::Event"]],["impl Send for Error",1,["usbh::bus::Error"]],["impl<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> Send for SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>",1,["usbh::driver::detector::SimpleDetector"]],["impl<const MAX_DEVICES: usize> Send for KbdDriver<MAX_DEVICES>",1,["usbh::driver::kbd::KbdDriver"]],["impl Send for InputReport",1,["usbh::driver::kbd::InputReport"]],["impl Send for ModifierStatus",1,["usbh::driver::kbd::ModifierStatus"]],["impl Send for KbdEvent",1,["usbh::driver::kbd::KbdEvent"]],["impl Send for KbdLed",1,["usbh::driver::kbd::KbdLed"]],["impl Send for KbdError",1,["usbh::driver::kbd::KbdError"]],["impl Send for LogDriver",1,["usbh::driver::log::LogDriver"]],["impl Send for EventMask",1,["usbh::driver::log::EventMask"]],["impl Send for HubDescriptor",1,["usbh::driver::hub::HubDescriptor"]],["impl Send for Characteristics",1,["usbh::driver::hub::Characteristics"]],["impl Send for DeviceRemovable",1,["usbh::driver::hub::DeviceRemovable"]],["impl Send for PortFeature",1,["usbh::driver::hub::PortFeature"]],["impl Send for HubEvent",1,["usbh::driver::hub::HubEvent"]],["impl Send for PortStatus",1,["usbh::driver::hub::PortStatus"]],["impl Send for HubStatus",1,["usbh::driver::hub::HubStatus"]],["impl Send for HubError",1,["usbh::driver::hub::HubError"]],["impl<const MAX_HUBS: usize> Send for HubDriver<MAX_HUBS>",1,["usbh::driver::hub::HubDriver"]],["impl Send for DeviceAddress",1,["usbh::types::DeviceAddress"]],["impl Send for Bcd16",1,["usbh::types::Bcd16"]],["impl Send for ConnectionSpeed",1,["usbh::types::ConnectionSpeed"]],["impl Send for TransferType",1,["usbh::types::TransferType"]],["impl Send for SetupPacket",1,["usbh::types::SetupPacket"]],["impl<'a> Send for Descriptor<'a>",1,["usbh::descriptor::Descriptor"]],["impl Send for DeviceDescriptor",1,["usbh::descriptor::DeviceDescriptor"]],["impl Send for ConfigurationDescriptor",1,["usbh::descriptor::ConfigurationDescriptor"]],["impl Send for ConfigurationAttributes",1,["usbh::descriptor::ConfigurationAttributes"]],["impl Send for InterfaceDescriptor",1,["usbh::descriptor::InterfaceDescriptor"]],["impl Send for EndpointDescriptor",1,["usbh::descriptor::EndpointDescriptor"]],["impl Send for EndpointAddress",1,["usbh::descriptor::EndpointAddress"]],["impl Send for EndpointAttributes",1,["usbh::descriptor::EndpointAttributes"]],["impl Send for SynchronizationType",1,["usbh::descriptor::SynchronizationType"]],["impl Send for UsageType",1,["usbh::descriptor::UsageType"]],["impl Send for ControlError",1,["usbh::ControlError"]],["impl Send for Event",1,["usbh::Event"]],["impl Send for PollResult",1,["usbh::PollResult"]],["impl<B> Send for UsbHost<B>where\n B: Send,",1,["usbh::UsbHost"]],["impl Send for PipeId",1,["usbh::PipeId"]]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/marker/trait.StructuralEq.js b/doc/implementors/core/marker/trait.StructuralEq.js index 9641545..ab71e69 100644 --- a/doc/implementors/core/marker/trait.StructuralEq.js +++ b/doc/implementors/core/marker/trait.StructuralEq.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl StructuralEq for EventMask"],["impl StructuralEq for PortStatus"]] +"usbh":[["impl StructuralEq for EventMask"],["impl StructuralEq for PortStatus"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/marker/trait.StructuralPartialEq.js b/doc/implementors/core/marker/trait.StructuralPartialEq.js index a89bcef..35c86c1 100644 --- a/doc/implementors/core/marker/trait.StructuralPartialEq.js +++ b/doc/implementors/core/marker/trait.StructuralPartialEq.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl StructuralPartialEq for Event"],["impl StructuralPartialEq for TransferType"],["impl StructuralPartialEq for PortFeature"],["impl StructuralPartialEq for Bcd16"],["impl StructuralPartialEq for ControlError"],["impl StructuralPartialEq for Error"],["impl StructuralPartialEq for ConnectionSpeed"],["impl StructuralPartialEq for DeviceAddress"],["impl StructuralPartialEq for PortStatus"],["impl StructuralPartialEq for EventMask"],["impl StructuralPartialEq for PipeId"]] +"usbh":[["impl StructuralPartialEq for Error"],["impl StructuralPartialEq for PortFeature"],["impl StructuralPartialEq for TransferType"],["impl StructuralPartialEq for DeviceAddress"],["impl StructuralPartialEq for PipeId"],["impl StructuralPartialEq for ConnectionSpeed"],["impl StructuralPartialEq for ControlError"],["impl StructuralPartialEq for PortStatus"],["impl StructuralPartialEq for Bcd16"],["impl StructuralPartialEq for EventMask"],["impl StructuralPartialEq for Event"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/marker/trait.Sync.js b/doc/implementors/core/marker/trait.Sync.js index 2b7ef17..8a38b29 100644 --- a/doc/implementors/core/marker/trait.Sync.js +++ b/doc/implementors/core/marker/trait.Sync.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl !Sync for InterruptPipe",1,["usbh::bus::InterruptPipe"]],["impl Sync for Event",1,["usbh::bus::Event"]],["impl Sync for Error",1,["usbh::bus::Error"]],["impl<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> Sync for SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>",1,["usbh::driver::detector::SimpleDetector"]],["impl<const MAX_DEVICES: usize> Sync for KbdDriver<MAX_DEVICES>",1,["usbh::driver::kbd::KbdDriver"]],["impl Sync for InputReport",1,["usbh::driver::kbd::InputReport"]],["impl Sync for ModifierStatus",1,["usbh::driver::kbd::ModifierStatus"]],["impl Sync for KbdEvent",1,["usbh::driver::kbd::KbdEvent"]],["impl Sync for KbdLed",1,["usbh::driver::kbd::KbdLed"]],["impl Sync for KbdError",1,["usbh::driver::kbd::KbdError"]],["impl Sync for LogDriver",1,["usbh::driver::log::LogDriver"]],["impl Sync for EventMask",1,["usbh::driver::log::EventMask"]],["impl Sync for HubDescriptor",1,["usbh::driver::hub::HubDescriptor"]],["impl Sync for Characteristics",1,["usbh::driver::hub::Characteristics"]],["impl Sync for DeviceRemovable",1,["usbh::driver::hub::DeviceRemovable"]],["impl Sync for PortFeature",1,["usbh::driver::hub::PortFeature"]],["impl Sync for HubEvent",1,["usbh::driver::hub::HubEvent"]],["impl Sync for PortStatus",1,["usbh::driver::hub::PortStatus"]],["impl Sync for HubStatus",1,["usbh::driver::hub::HubStatus"]],["impl Sync for HubError",1,["usbh::driver::hub::HubError"]],["impl<const MAX_HUBS: usize> Sync for HubDriver<MAX_HUBS>",1,["usbh::driver::hub::HubDriver"]],["impl Sync for DeviceAddress",1,["usbh::types::DeviceAddress"]],["impl Sync for Bcd16",1,["usbh::types::Bcd16"]],["impl Sync for ConnectionSpeed",1,["usbh::types::ConnectionSpeed"]],["impl Sync for TransferType",1,["usbh::types::TransferType"]],["impl Sync for SetupPacket",1,["usbh::types::SetupPacket"]],["impl<'a> Sync for Descriptor<'a>",1,["usbh::descriptor::Descriptor"]],["impl Sync for DeviceDescriptor",1,["usbh::descriptor::DeviceDescriptor"]],["impl Sync for ConfigurationDescriptor",1,["usbh::descriptor::ConfigurationDescriptor"]],["impl Sync for ConfigurationAttributes",1,["usbh::descriptor::ConfigurationAttributes"]],["impl Sync for InterfaceDescriptor",1,["usbh::descriptor::InterfaceDescriptor"]],["impl Sync for EndpointDescriptor",1,["usbh::descriptor::EndpointDescriptor"]],["impl Sync for EndpointAddress",1,["usbh::descriptor::EndpointAddress"]],["impl Sync for EndpointAttributes",1,["usbh::descriptor::EndpointAttributes"]],["impl Sync for SynchronizationType",1,["usbh::descriptor::SynchronizationType"]],["impl Sync for UsageType",1,["usbh::descriptor::UsageType"]],["impl Sync for ControlError",1,["usbh::ControlError"]],["impl Sync for Event",1,["usbh::Event"]],["impl Sync for PollResult",1,["usbh::PollResult"]],["impl<B> !Sync for UsbHost<B>",1,["usbh::UsbHost"]],["impl Sync for PipeId",1,["usbh::PipeId"]]] +"usbh":[["impl !Sync for InterruptPipe",1,["usbh::bus::InterruptPipe"]],["impl Sync for Event",1,["usbh::bus::Event"]],["impl Sync for Error",1,["usbh::bus::Error"]],["impl<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> Sync for SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>",1,["usbh::driver::detector::SimpleDetector"]],["impl<const MAX_DEVICES: usize> Sync for KbdDriver<MAX_DEVICES>",1,["usbh::driver::kbd::KbdDriver"]],["impl Sync for InputReport",1,["usbh::driver::kbd::InputReport"]],["impl Sync for ModifierStatus",1,["usbh::driver::kbd::ModifierStatus"]],["impl Sync for KbdEvent",1,["usbh::driver::kbd::KbdEvent"]],["impl Sync for KbdLed",1,["usbh::driver::kbd::KbdLed"]],["impl Sync for KbdError",1,["usbh::driver::kbd::KbdError"]],["impl Sync for LogDriver",1,["usbh::driver::log::LogDriver"]],["impl Sync for EventMask",1,["usbh::driver::log::EventMask"]],["impl Sync for HubDescriptor",1,["usbh::driver::hub::HubDescriptor"]],["impl Sync for Characteristics",1,["usbh::driver::hub::Characteristics"]],["impl Sync for DeviceRemovable",1,["usbh::driver::hub::DeviceRemovable"]],["impl Sync for PortFeature",1,["usbh::driver::hub::PortFeature"]],["impl Sync for HubEvent",1,["usbh::driver::hub::HubEvent"]],["impl Sync for PortStatus",1,["usbh::driver::hub::PortStatus"]],["impl Sync for HubStatus",1,["usbh::driver::hub::HubStatus"]],["impl Sync for HubError",1,["usbh::driver::hub::HubError"]],["impl<const MAX_HUBS: usize> Sync for HubDriver<MAX_HUBS>",1,["usbh::driver::hub::HubDriver"]],["impl Sync for DeviceAddress",1,["usbh::types::DeviceAddress"]],["impl Sync for Bcd16",1,["usbh::types::Bcd16"]],["impl Sync for ConnectionSpeed",1,["usbh::types::ConnectionSpeed"]],["impl Sync for TransferType",1,["usbh::types::TransferType"]],["impl Sync for SetupPacket",1,["usbh::types::SetupPacket"]],["impl<'a> Sync for Descriptor<'a>",1,["usbh::descriptor::Descriptor"]],["impl Sync for DeviceDescriptor",1,["usbh::descriptor::DeviceDescriptor"]],["impl Sync for ConfigurationDescriptor",1,["usbh::descriptor::ConfigurationDescriptor"]],["impl Sync for ConfigurationAttributes",1,["usbh::descriptor::ConfigurationAttributes"]],["impl Sync for InterfaceDescriptor",1,["usbh::descriptor::InterfaceDescriptor"]],["impl Sync for EndpointDescriptor",1,["usbh::descriptor::EndpointDescriptor"]],["impl Sync for EndpointAddress",1,["usbh::descriptor::EndpointAddress"]],["impl Sync for EndpointAttributes",1,["usbh::descriptor::EndpointAttributes"]],["impl Sync for SynchronizationType",1,["usbh::descriptor::SynchronizationType"]],["impl Sync for UsageType",1,["usbh::descriptor::UsageType"]],["impl Sync for ControlError",1,["usbh::ControlError"]],["impl Sync for Event",1,["usbh::Event"]],["impl Sync for PollResult",1,["usbh::PollResult"]],["impl<B> !Sync for UsbHost<B>",1,["usbh::UsbHost"]],["impl Sync for PipeId",1,["usbh::PipeId"]]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/marker/trait.Unpin.js b/doc/implementors/core/marker/trait.Unpin.js index 0122e02..3ca9c0a 100644 --- a/doc/implementors/core/marker/trait.Unpin.js +++ b/doc/implementors/core/marker/trait.Unpin.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl Unpin for InterruptPipe",1,["usbh::bus::InterruptPipe"]],["impl Unpin for Event",1,["usbh::bus::Event"]],["impl Unpin for Error",1,["usbh::bus::Error"]],["impl<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> Unpin for SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>",1,["usbh::driver::detector::SimpleDetector"]],["impl<const MAX_DEVICES: usize> Unpin for KbdDriver<MAX_DEVICES>",1,["usbh::driver::kbd::KbdDriver"]],["impl Unpin for InputReport",1,["usbh::driver::kbd::InputReport"]],["impl Unpin for ModifierStatus",1,["usbh::driver::kbd::ModifierStatus"]],["impl Unpin for KbdEvent",1,["usbh::driver::kbd::KbdEvent"]],["impl Unpin for KbdLed",1,["usbh::driver::kbd::KbdLed"]],["impl Unpin for KbdError",1,["usbh::driver::kbd::KbdError"]],["impl Unpin for LogDriver",1,["usbh::driver::log::LogDriver"]],["impl Unpin for EventMask",1,["usbh::driver::log::EventMask"]],["impl Unpin for HubDescriptor",1,["usbh::driver::hub::HubDescriptor"]],["impl Unpin for Characteristics",1,["usbh::driver::hub::Characteristics"]],["impl Unpin for DeviceRemovable",1,["usbh::driver::hub::DeviceRemovable"]],["impl Unpin for PortFeature",1,["usbh::driver::hub::PortFeature"]],["impl Unpin for HubEvent",1,["usbh::driver::hub::HubEvent"]],["impl Unpin for PortStatus",1,["usbh::driver::hub::PortStatus"]],["impl Unpin for HubStatus",1,["usbh::driver::hub::HubStatus"]],["impl Unpin for HubError",1,["usbh::driver::hub::HubError"]],["impl<const MAX_HUBS: usize> Unpin for HubDriver<MAX_HUBS>",1,["usbh::driver::hub::HubDriver"]],["impl Unpin for DeviceAddress",1,["usbh::types::DeviceAddress"]],["impl Unpin for Bcd16",1,["usbh::types::Bcd16"]],["impl Unpin for ConnectionSpeed",1,["usbh::types::ConnectionSpeed"]],["impl Unpin for TransferType",1,["usbh::types::TransferType"]],["impl Unpin for SetupPacket",1,["usbh::types::SetupPacket"]],["impl<'a> Unpin for Descriptor<'a>",1,["usbh::descriptor::Descriptor"]],["impl Unpin for DeviceDescriptor",1,["usbh::descriptor::DeviceDescriptor"]],["impl Unpin for ConfigurationDescriptor",1,["usbh::descriptor::ConfigurationDescriptor"]],["impl Unpin for ConfigurationAttributes",1,["usbh::descriptor::ConfigurationAttributes"]],["impl Unpin for InterfaceDescriptor",1,["usbh::descriptor::InterfaceDescriptor"]],["impl Unpin for EndpointDescriptor",1,["usbh::descriptor::EndpointDescriptor"]],["impl Unpin for EndpointAddress",1,["usbh::descriptor::EndpointAddress"]],["impl Unpin for EndpointAttributes",1,["usbh::descriptor::EndpointAttributes"]],["impl Unpin for SynchronizationType",1,["usbh::descriptor::SynchronizationType"]],["impl Unpin for UsageType",1,["usbh::descriptor::UsageType"]],["impl Unpin for ControlError",1,["usbh::ControlError"]],["impl Unpin for Event",1,["usbh::Event"]],["impl Unpin for PollResult",1,["usbh::PollResult"]],["impl<B> Unpin for UsbHost<B>where\n B: Unpin,",1,["usbh::UsbHost"]],["impl Unpin for PipeId",1,["usbh::PipeId"]]] +"usbh":[["impl Unpin for InterruptPipe",1,["usbh::bus::InterruptPipe"]],["impl Unpin for Event",1,["usbh::bus::Event"]],["impl Unpin for Error",1,["usbh::bus::Error"]],["impl<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> Unpin for SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>",1,["usbh::driver::detector::SimpleDetector"]],["impl<const MAX_DEVICES: usize> Unpin for KbdDriver<MAX_DEVICES>",1,["usbh::driver::kbd::KbdDriver"]],["impl Unpin for InputReport",1,["usbh::driver::kbd::InputReport"]],["impl Unpin for ModifierStatus",1,["usbh::driver::kbd::ModifierStatus"]],["impl Unpin for KbdEvent",1,["usbh::driver::kbd::KbdEvent"]],["impl Unpin for KbdLed",1,["usbh::driver::kbd::KbdLed"]],["impl Unpin for KbdError",1,["usbh::driver::kbd::KbdError"]],["impl Unpin for LogDriver",1,["usbh::driver::log::LogDriver"]],["impl Unpin for EventMask",1,["usbh::driver::log::EventMask"]],["impl Unpin for HubDescriptor",1,["usbh::driver::hub::HubDescriptor"]],["impl Unpin for Characteristics",1,["usbh::driver::hub::Characteristics"]],["impl Unpin for DeviceRemovable",1,["usbh::driver::hub::DeviceRemovable"]],["impl Unpin for PortFeature",1,["usbh::driver::hub::PortFeature"]],["impl Unpin for HubEvent",1,["usbh::driver::hub::HubEvent"]],["impl Unpin for PortStatus",1,["usbh::driver::hub::PortStatus"]],["impl Unpin for HubStatus",1,["usbh::driver::hub::HubStatus"]],["impl Unpin for HubError",1,["usbh::driver::hub::HubError"]],["impl<const MAX_HUBS: usize> Unpin for HubDriver<MAX_HUBS>",1,["usbh::driver::hub::HubDriver"]],["impl Unpin for DeviceAddress",1,["usbh::types::DeviceAddress"]],["impl Unpin for Bcd16",1,["usbh::types::Bcd16"]],["impl Unpin for ConnectionSpeed",1,["usbh::types::ConnectionSpeed"]],["impl Unpin for TransferType",1,["usbh::types::TransferType"]],["impl Unpin for SetupPacket",1,["usbh::types::SetupPacket"]],["impl<'a> Unpin for Descriptor<'a>",1,["usbh::descriptor::Descriptor"]],["impl Unpin for DeviceDescriptor",1,["usbh::descriptor::DeviceDescriptor"]],["impl Unpin for ConfigurationDescriptor",1,["usbh::descriptor::ConfigurationDescriptor"]],["impl Unpin for ConfigurationAttributes",1,["usbh::descriptor::ConfigurationAttributes"]],["impl Unpin for InterfaceDescriptor",1,["usbh::descriptor::InterfaceDescriptor"]],["impl Unpin for EndpointDescriptor",1,["usbh::descriptor::EndpointDescriptor"]],["impl Unpin for EndpointAddress",1,["usbh::descriptor::EndpointAddress"]],["impl Unpin for EndpointAttributes",1,["usbh::descriptor::EndpointAttributes"]],["impl Unpin for SynchronizationType",1,["usbh::descriptor::SynchronizationType"]],["impl Unpin for UsageType",1,["usbh::descriptor::UsageType"]],["impl Unpin for ControlError",1,["usbh::ControlError"]],["impl Unpin for Event",1,["usbh::Event"]],["impl Unpin for PollResult",1,["usbh::PollResult"]],["impl<B> Unpin for UsbHost<B>where\n B: Unpin,",1,["usbh::UsbHost"]],["impl Unpin for PipeId",1,["usbh::PipeId"]]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/ops/arith/trait.Sub.js b/doc/implementors/core/ops/arith/trait.Sub.js index 7b8411b..6b77d7d 100644 --- a/doc/implementors/core/ops/arith/trait.Sub.js +++ b/doc/implementors/core/ops/arith/trait.Sub.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl Sub<PortStatus> for PortStatus"],["impl Sub<EventMask> for EventMask"]] +"usbh":[["impl Sub<EventMask> for EventMask"],["impl Sub<PortStatus> for PortStatus"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/ops/arith/trait.SubAssign.js b/doc/implementors/core/ops/arith/trait.SubAssign.js index 84e4abc..b89749a 100644 --- a/doc/implementors/core/ops/arith/trait.SubAssign.js +++ b/doc/implementors/core/ops/arith/trait.SubAssign.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl SubAssign<PortStatus> for PortStatus"],["impl SubAssign<EventMask> for EventMask"]] +"usbh":[["impl SubAssign<PortStatus> for PortStatus"],["impl SubAssign<EventMask> for EventMask"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/ops/bit/trait.BitAnd.js b/doc/implementors/core/ops/bit/trait.BitAnd.js index 3e402d9..69efd18 100644 --- a/doc/implementors/core/ops/bit/trait.BitAnd.js +++ b/doc/implementors/core/ops/bit/trait.BitAnd.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl BitAnd<EventMask> for EventMask"],["impl BitAnd<PortStatus> for PortStatus"]] +"usbh":[["impl BitAnd<EventMask> for EventMask"],["impl BitAnd<PortStatus> for PortStatus"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/ops/bit/trait.BitAndAssign.js b/doc/implementors/core/ops/bit/trait.BitAndAssign.js index f92fd9b..94c4a40 100644 --- a/doc/implementors/core/ops/bit/trait.BitAndAssign.js +++ b/doc/implementors/core/ops/bit/trait.BitAndAssign.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl BitAndAssign<EventMask> for EventMask"],["impl BitAndAssign<PortStatus> for PortStatus"]] +"usbh":[["impl BitAndAssign<PortStatus> for PortStatus"],["impl BitAndAssign<EventMask> for EventMask"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/ops/bit/trait.BitOr.js b/doc/implementors/core/ops/bit/trait.BitOr.js index 4f62ed0..6324b80 100644 --- a/doc/implementors/core/ops/bit/trait.BitOr.js +++ b/doc/implementors/core/ops/bit/trait.BitOr.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl BitOr<PortStatus> for PortStatus"],["impl BitOr<EventMask> for EventMask"]] +"usbh":[["impl BitOr<PortStatus> for PortStatus"],["impl BitOr<EventMask> for EventMask"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/ops/bit/trait.BitOrAssign.js b/doc/implementors/core/ops/bit/trait.BitOrAssign.js index 1d292a9..5509a20 100644 --- a/doc/implementors/core/ops/bit/trait.BitOrAssign.js +++ b/doc/implementors/core/ops/bit/trait.BitOrAssign.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl BitOrAssign<EventMask> for EventMask"],["impl BitOrAssign<PortStatus> for PortStatus"]] +"usbh":[["impl BitOrAssign<PortStatus> for PortStatus"],["impl BitOrAssign<EventMask> for EventMask"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/ops/bit/trait.BitXor.js b/doc/implementors/core/ops/bit/trait.BitXor.js index bd7c872..b0b376b 100644 --- a/doc/implementors/core/ops/bit/trait.BitXor.js +++ b/doc/implementors/core/ops/bit/trait.BitXor.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl BitXor<PortStatus> for PortStatus"],["impl BitXor<EventMask> for EventMask"]] +"usbh":[["impl BitXor<PortStatus> for PortStatus"],["impl BitXor<EventMask> for EventMask"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/ops/bit/trait.BitXorAssign.js b/doc/implementors/core/ops/bit/trait.BitXorAssign.js index 8bbf2ff..ff03525 100644 --- a/doc/implementors/core/ops/bit/trait.BitXorAssign.js +++ b/doc/implementors/core/ops/bit/trait.BitXorAssign.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl BitXorAssign<PortStatus> for PortStatus"],["impl BitXorAssign<EventMask> for EventMask"]] +"usbh":[["impl BitXorAssign<PortStatus> for PortStatus"],["impl BitXorAssign<EventMask> for EventMask"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/ops/bit/trait.Not.js b/doc/implementors/core/ops/bit/trait.Not.js index c39bccd..3f86814 100644 --- a/doc/implementors/core/ops/bit/trait.Not.js +++ b/doc/implementors/core/ops/bit/trait.Not.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl Not for EventMask"],["impl Not for PortStatus"]] +"usbh":[["impl Not for PortStatus"],["impl Not for EventMask"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js b/doc/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js index 3c61e7e..538c241 100644 --- a/doc/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js +++ b/doc/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl RefUnwindSafe for InterruptPipe",1,["usbh::bus::InterruptPipe"]],["impl RefUnwindSafe for Event",1,["usbh::bus::Event"]],["impl RefUnwindSafe for Error",1,["usbh::bus::Error"]],["impl<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> RefUnwindSafe for SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>",1,["usbh::driver::detector::SimpleDetector"]],["impl<const MAX_DEVICES: usize> RefUnwindSafe for KbdDriver<MAX_DEVICES>",1,["usbh::driver::kbd::KbdDriver"]],["impl RefUnwindSafe for InputReport",1,["usbh::driver::kbd::InputReport"]],["impl RefUnwindSafe for ModifierStatus",1,["usbh::driver::kbd::ModifierStatus"]],["impl RefUnwindSafe for KbdEvent",1,["usbh::driver::kbd::KbdEvent"]],["impl RefUnwindSafe for KbdLed",1,["usbh::driver::kbd::KbdLed"]],["impl RefUnwindSafe for KbdError",1,["usbh::driver::kbd::KbdError"]],["impl RefUnwindSafe for LogDriver",1,["usbh::driver::log::LogDriver"]],["impl RefUnwindSafe for EventMask",1,["usbh::driver::log::EventMask"]],["impl RefUnwindSafe for HubDescriptor",1,["usbh::driver::hub::HubDescriptor"]],["impl RefUnwindSafe for Characteristics",1,["usbh::driver::hub::Characteristics"]],["impl RefUnwindSafe for DeviceRemovable",1,["usbh::driver::hub::DeviceRemovable"]],["impl RefUnwindSafe for PortFeature",1,["usbh::driver::hub::PortFeature"]],["impl RefUnwindSafe for HubEvent",1,["usbh::driver::hub::HubEvent"]],["impl RefUnwindSafe for PortStatus",1,["usbh::driver::hub::PortStatus"]],["impl RefUnwindSafe for HubStatus",1,["usbh::driver::hub::HubStatus"]],["impl RefUnwindSafe for HubError",1,["usbh::driver::hub::HubError"]],["impl<const MAX_HUBS: usize> RefUnwindSafe for HubDriver<MAX_HUBS>",1,["usbh::driver::hub::HubDriver"]],["impl RefUnwindSafe for DeviceAddress",1,["usbh::types::DeviceAddress"]],["impl RefUnwindSafe for Bcd16",1,["usbh::types::Bcd16"]],["impl RefUnwindSafe for ConnectionSpeed",1,["usbh::types::ConnectionSpeed"]],["impl RefUnwindSafe for TransferType",1,["usbh::types::TransferType"]],["impl RefUnwindSafe for SetupPacket",1,["usbh::types::SetupPacket"]],["impl<'a> RefUnwindSafe for Descriptor<'a>",1,["usbh::descriptor::Descriptor"]],["impl RefUnwindSafe for DeviceDescriptor",1,["usbh::descriptor::DeviceDescriptor"]],["impl RefUnwindSafe for ConfigurationDescriptor",1,["usbh::descriptor::ConfigurationDescriptor"]],["impl RefUnwindSafe for ConfigurationAttributes",1,["usbh::descriptor::ConfigurationAttributes"]],["impl RefUnwindSafe for InterfaceDescriptor",1,["usbh::descriptor::InterfaceDescriptor"]],["impl RefUnwindSafe for EndpointDescriptor",1,["usbh::descriptor::EndpointDescriptor"]],["impl RefUnwindSafe for EndpointAddress",1,["usbh::descriptor::EndpointAddress"]],["impl RefUnwindSafe for EndpointAttributes",1,["usbh::descriptor::EndpointAttributes"]],["impl RefUnwindSafe for SynchronizationType",1,["usbh::descriptor::SynchronizationType"]],["impl RefUnwindSafe for UsageType",1,["usbh::descriptor::UsageType"]],["impl RefUnwindSafe for ControlError",1,["usbh::ControlError"]],["impl RefUnwindSafe for Event",1,["usbh::Event"]],["impl RefUnwindSafe for PollResult",1,["usbh::PollResult"]],["impl<B> RefUnwindSafe for UsbHost<B>where\n B: RefUnwindSafe,",1,["usbh::UsbHost"]],["impl RefUnwindSafe for PipeId",1,["usbh::PipeId"]]] +"usbh":[["impl RefUnwindSafe for InterruptPipe",1,["usbh::bus::InterruptPipe"]],["impl RefUnwindSafe for Event",1,["usbh::bus::Event"]],["impl RefUnwindSafe for Error",1,["usbh::bus::Error"]],["impl<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> RefUnwindSafe for SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>",1,["usbh::driver::detector::SimpleDetector"]],["impl<const MAX_DEVICES: usize> RefUnwindSafe for KbdDriver<MAX_DEVICES>",1,["usbh::driver::kbd::KbdDriver"]],["impl RefUnwindSafe for InputReport",1,["usbh::driver::kbd::InputReport"]],["impl RefUnwindSafe for ModifierStatus",1,["usbh::driver::kbd::ModifierStatus"]],["impl RefUnwindSafe for KbdEvent",1,["usbh::driver::kbd::KbdEvent"]],["impl RefUnwindSafe for KbdLed",1,["usbh::driver::kbd::KbdLed"]],["impl RefUnwindSafe for KbdError",1,["usbh::driver::kbd::KbdError"]],["impl RefUnwindSafe for LogDriver",1,["usbh::driver::log::LogDriver"]],["impl RefUnwindSafe for EventMask",1,["usbh::driver::log::EventMask"]],["impl RefUnwindSafe for HubDescriptor",1,["usbh::driver::hub::HubDescriptor"]],["impl RefUnwindSafe for Characteristics",1,["usbh::driver::hub::Characteristics"]],["impl RefUnwindSafe for DeviceRemovable",1,["usbh::driver::hub::DeviceRemovable"]],["impl RefUnwindSafe for PortFeature",1,["usbh::driver::hub::PortFeature"]],["impl RefUnwindSafe for HubEvent",1,["usbh::driver::hub::HubEvent"]],["impl RefUnwindSafe for PortStatus",1,["usbh::driver::hub::PortStatus"]],["impl RefUnwindSafe for HubStatus",1,["usbh::driver::hub::HubStatus"]],["impl RefUnwindSafe for HubError",1,["usbh::driver::hub::HubError"]],["impl<const MAX_HUBS: usize> RefUnwindSafe for HubDriver<MAX_HUBS>",1,["usbh::driver::hub::HubDriver"]],["impl RefUnwindSafe for DeviceAddress",1,["usbh::types::DeviceAddress"]],["impl RefUnwindSafe for Bcd16",1,["usbh::types::Bcd16"]],["impl RefUnwindSafe for ConnectionSpeed",1,["usbh::types::ConnectionSpeed"]],["impl RefUnwindSafe for TransferType",1,["usbh::types::TransferType"]],["impl RefUnwindSafe for SetupPacket",1,["usbh::types::SetupPacket"]],["impl<'a> RefUnwindSafe for Descriptor<'a>",1,["usbh::descriptor::Descriptor"]],["impl RefUnwindSafe for DeviceDescriptor",1,["usbh::descriptor::DeviceDescriptor"]],["impl RefUnwindSafe for ConfigurationDescriptor",1,["usbh::descriptor::ConfigurationDescriptor"]],["impl RefUnwindSafe for ConfigurationAttributes",1,["usbh::descriptor::ConfigurationAttributes"]],["impl RefUnwindSafe for InterfaceDescriptor",1,["usbh::descriptor::InterfaceDescriptor"]],["impl RefUnwindSafe for EndpointDescriptor",1,["usbh::descriptor::EndpointDescriptor"]],["impl RefUnwindSafe for EndpointAddress",1,["usbh::descriptor::EndpointAddress"]],["impl RefUnwindSafe for EndpointAttributes",1,["usbh::descriptor::EndpointAttributes"]],["impl RefUnwindSafe for SynchronizationType",1,["usbh::descriptor::SynchronizationType"]],["impl RefUnwindSafe for UsageType",1,["usbh::descriptor::UsageType"]],["impl RefUnwindSafe for ControlError",1,["usbh::ControlError"]],["impl RefUnwindSafe for Event",1,["usbh::Event"]],["impl RefUnwindSafe for PollResult",1,["usbh::PollResult"]],["impl<B> RefUnwindSafe for UsbHost<B>where\n B: RefUnwindSafe,",1,["usbh::UsbHost"]],["impl RefUnwindSafe for PipeId",1,["usbh::PipeId"]]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/core/panic/unwind_safe/trait.UnwindSafe.js b/doc/implementors/core/panic/unwind_safe/trait.UnwindSafe.js index add8d80..7b5aeff 100644 --- a/doc/implementors/core/panic/unwind_safe/trait.UnwindSafe.js +++ b/doc/implementors/core/panic/unwind_safe/trait.UnwindSafe.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl UnwindSafe for InterruptPipe",1,["usbh::bus::InterruptPipe"]],["impl UnwindSafe for Event",1,["usbh::bus::Event"]],["impl UnwindSafe for Error",1,["usbh::bus::Error"]],["impl<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> UnwindSafe for SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>",1,["usbh::driver::detector::SimpleDetector"]],["impl<const MAX_DEVICES: usize> UnwindSafe for KbdDriver<MAX_DEVICES>",1,["usbh::driver::kbd::KbdDriver"]],["impl UnwindSafe for InputReport",1,["usbh::driver::kbd::InputReport"]],["impl UnwindSafe for ModifierStatus",1,["usbh::driver::kbd::ModifierStatus"]],["impl UnwindSafe for KbdEvent",1,["usbh::driver::kbd::KbdEvent"]],["impl UnwindSafe for KbdLed",1,["usbh::driver::kbd::KbdLed"]],["impl UnwindSafe for KbdError",1,["usbh::driver::kbd::KbdError"]],["impl UnwindSafe for LogDriver",1,["usbh::driver::log::LogDriver"]],["impl UnwindSafe for EventMask",1,["usbh::driver::log::EventMask"]],["impl UnwindSafe for HubDescriptor",1,["usbh::driver::hub::HubDescriptor"]],["impl UnwindSafe for Characteristics",1,["usbh::driver::hub::Characteristics"]],["impl UnwindSafe for DeviceRemovable",1,["usbh::driver::hub::DeviceRemovable"]],["impl UnwindSafe for PortFeature",1,["usbh::driver::hub::PortFeature"]],["impl UnwindSafe for HubEvent",1,["usbh::driver::hub::HubEvent"]],["impl UnwindSafe for PortStatus",1,["usbh::driver::hub::PortStatus"]],["impl UnwindSafe for HubStatus",1,["usbh::driver::hub::HubStatus"]],["impl UnwindSafe for HubError",1,["usbh::driver::hub::HubError"]],["impl<const MAX_HUBS: usize> UnwindSafe for HubDriver<MAX_HUBS>",1,["usbh::driver::hub::HubDriver"]],["impl UnwindSafe for DeviceAddress",1,["usbh::types::DeviceAddress"]],["impl UnwindSafe for Bcd16",1,["usbh::types::Bcd16"]],["impl UnwindSafe for ConnectionSpeed",1,["usbh::types::ConnectionSpeed"]],["impl UnwindSafe for TransferType",1,["usbh::types::TransferType"]],["impl UnwindSafe for SetupPacket",1,["usbh::types::SetupPacket"]],["impl<'a> UnwindSafe for Descriptor<'a>",1,["usbh::descriptor::Descriptor"]],["impl UnwindSafe for DeviceDescriptor",1,["usbh::descriptor::DeviceDescriptor"]],["impl UnwindSafe for ConfigurationDescriptor",1,["usbh::descriptor::ConfigurationDescriptor"]],["impl UnwindSafe for ConfigurationAttributes",1,["usbh::descriptor::ConfigurationAttributes"]],["impl UnwindSafe for InterfaceDescriptor",1,["usbh::descriptor::InterfaceDescriptor"]],["impl UnwindSafe for EndpointDescriptor",1,["usbh::descriptor::EndpointDescriptor"]],["impl UnwindSafe for EndpointAddress",1,["usbh::descriptor::EndpointAddress"]],["impl UnwindSafe for EndpointAttributes",1,["usbh::descriptor::EndpointAttributes"]],["impl UnwindSafe for SynchronizationType",1,["usbh::descriptor::SynchronizationType"]],["impl UnwindSafe for UsageType",1,["usbh::descriptor::UsageType"]],["impl UnwindSafe for ControlError",1,["usbh::ControlError"]],["impl UnwindSafe for Event",1,["usbh::Event"]],["impl UnwindSafe for PollResult",1,["usbh::PollResult"]],["impl<B> UnwindSafe for UsbHost<B>where\n B: UnwindSafe,",1,["usbh::UsbHost"]],["impl UnwindSafe for PipeId",1,["usbh::PipeId"]]] +"usbh":[["impl UnwindSafe for InterruptPipe",1,["usbh::bus::InterruptPipe"]],["impl UnwindSafe for Event",1,["usbh::bus::Event"]],["impl UnwindSafe for Error",1,["usbh::bus::Error"]],["impl<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> UnwindSafe for SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>",1,["usbh::driver::detector::SimpleDetector"]],["impl<const MAX_DEVICES: usize> UnwindSafe for KbdDriver<MAX_DEVICES>",1,["usbh::driver::kbd::KbdDriver"]],["impl UnwindSafe for InputReport",1,["usbh::driver::kbd::InputReport"]],["impl UnwindSafe for ModifierStatus",1,["usbh::driver::kbd::ModifierStatus"]],["impl UnwindSafe for KbdEvent",1,["usbh::driver::kbd::KbdEvent"]],["impl UnwindSafe for KbdLed",1,["usbh::driver::kbd::KbdLed"]],["impl UnwindSafe for KbdError",1,["usbh::driver::kbd::KbdError"]],["impl UnwindSafe for LogDriver",1,["usbh::driver::log::LogDriver"]],["impl UnwindSafe for EventMask",1,["usbh::driver::log::EventMask"]],["impl UnwindSafe for HubDescriptor",1,["usbh::driver::hub::HubDescriptor"]],["impl UnwindSafe for Characteristics",1,["usbh::driver::hub::Characteristics"]],["impl UnwindSafe for DeviceRemovable",1,["usbh::driver::hub::DeviceRemovable"]],["impl UnwindSafe for PortFeature",1,["usbh::driver::hub::PortFeature"]],["impl UnwindSafe for HubEvent",1,["usbh::driver::hub::HubEvent"]],["impl UnwindSafe for PortStatus",1,["usbh::driver::hub::PortStatus"]],["impl UnwindSafe for HubStatus",1,["usbh::driver::hub::HubStatus"]],["impl UnwindSafe for HubError",1,["usbh::driver::hub::HubError"]],["impl<const MAX_HUBS: usize> UnwindSafe for HubDriver<MAX_HUBS>",1,["usbh::driver::hub::HubDriver"]],["impl UnwindSafe for DeviceAddress",1,["usbh::types::DeviceAddress"]],["impl UnwindSafe for Bcd16",1,["usbh::types::Bcd16"]],["impl UnwindSafe for ConnectionSpeed",1,["usbh::types::ConnectionSpeed"]],["impl UnwindSafe for TransferType",1,["usbh::types::TransferType"]],["impl UnwindSafe for SetupPacket",1,["usbh::types::SetupPacket"]],["impl<'a> UnwindSafe for Descriptor<'a>",1,["usbh::descriptor::Descriptor"]],["impl UnwindSafe for DeviceDescriptor",1,["usbh::descriptor::DeviceDescriptor"]],["impl UnwindSafe for ConfigurationDescriptor",1,["usbh::descriptor::ConfigurationDescriptor"]],["impl UnwindSafe for ConfigurationAttributes",1,["usbh::descriptor::ConfigurationAttributes"]],["impl UnwindSafe for InterfaceDescriptor",1,["usbh::descriptor::InterfaceDescriptor"]],["impl UnwindSafe for EndpointDescriptor",1,["usbh::descriptor::EndpointDescriptor"]],["impl UnwindSafe for EndpointAddress",1,["usbh::descriptor::EndpointAddress"]],["impl UnwindSafe for EndpointAttributes",1,["usbh::descriptor::EndpointAttributes"]],["impl UnwindSafe for SynchronizationType",1,["usbh::descriptor::SynchronizationType"]],["impl UnwindSafe for UsageType",1,["usbh::descriptor::UsageType"]],["impl UnwindSafe for ControlError",1,["usbh::ControlError"]],["impl UnwindSafe for Event",1,["usbh::Event"]],["impl UnwindSafe for PollResult",1,["usbh::PollResult"]],["impl<B> UnwindSafe for UsbHost<B>where\n B: UnwindSafe,",1,["usbh::UsbHost"]],["impl UnwindSafe for PipeId",1,["usbh::PipeId"]]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/implementors/defmt/traits/trait.Format.js b/doc/implementors/defmt/traits/trait.Format.js index 2d64358..936fbbe 100644 --- a/doc/implementors/defmt/traits/trait.Format.js +++ b/doc/implementors/defmt/traits/trait.Format.js @@ -1,3 +1,3 @@ (function() {var implementors = { -"usbh":[["impl Format for ConfigurationDescriptor"],["impl Format for DeviceDescriptor"],["impl Format for Bcd16"],["impl Format for KbdEvent"],["impl Format for EndpointDescriptor"],["impl Format for Event"],["impl Format for PortStatus"],["impl Format for EndpointAddress"],["impl Format for EndpointAttributes"],["impl Format for DeviceRemovable"],["impl Format for PipeId"],["impl Format for InputReport"],["impl Format for Event"],["impl Format for HubDescriptor"],["impl Format for PortFeature"],["impl Format for InterfaceDescriptor"],["impl Format for HubEvent"],["impl Format for ModifierStatus"],["impl Format for Characteristics"],["impl Format for EventMask"],["impl Format for HubStatus"],["impl Format for ConfigurationAttributes"],["impl Format for Error"],["impl Format for ConnectionSpeed"],["impl Format for DeviceAddress"]] +"usbh":[["impl Format for DeviceRemovable"],["impl Format for InterfaceDescriptor"],["impl Format for PipeId"],["impl Format for EndpointAttributes"],["impl Format for PortStatus"],["impl Format for EndpointDescriptor"],["impl Format for KbdEvent"],["impl Format for HubEvent"],["impl Format for InputReport"],["impl Format for HubDescriptor"],["impl Format for Event"],["impl Format for ConnectionSpeed"],["impl Format for ModifierStatus"],["impl Format for DeviceAddress"],["impl Format for EndpointAddress"],["impl Format for Event"],["impl Format for ConfigurationAttributes"],["impl Format for EventMask"],["impl Format for Bcd16"],["impl Format for Error"],["impl Format for Characteristics"],["impl Format for ConfigurationDescriptor"],["impl Format for PortFeature"],["impl Format for HubStatus"],["impl Format for DeviceDescriptor"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/doc/search-index.js b/doc/search-index.js index 8c30515..25ea713 100644 --- a/doc/search-index.js +++ b/doc/search-index.js @@ -1,5 +1,5 @@ var searchIndex = JSON.parse('{\ -"usbh":{"doc":"Experimental host-side USB stack for embedded devices.","t":"NNNNENNNNENNNNNDENNNDNLLLLLLLLLLALLLLLLLLAALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLANNNNNENEIDNNNNNNNNLLLLLLMLLKKLLLLLLLKLLLKKKKMKKKKKKKLLLLLLLLLKLKKNNDDNDDDDDNNDNNENRRRRREMMMMLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMLLLLLLLLLLLLLLLLLLMMMMMMMMMLLLLLLLLLLMMMMMMMMLAMLLMLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMFFFFFFFIKKKKKKKKAAAALDLLLLLLLLLLLLLNNSNNNSSSSSDNNDSNNDNDEENDNNSNSNSENNDNNNSNSNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLMLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNDNDEEEDNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLSSSSSSSSDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDNENDNNNNDELLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLMLMMLLLLLLLLLLLLLLLLM","n":["Attached","BusError","BusError","Busy","ControlError","ControlInData","ControlOutComplete","Detached","DiscoveryError","Event","Idle","InterruptPipe","InvalidPipe","NoDevice","None","PipeId","PollResult","Resume","Sof","Stall","UsbHost","WouldBlock","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","bus","bus","clone","clone","clone","control_in","control_out","create_control_pipe","create_interrupt_pipe","descriptor","driver","eq","eq","format","format","from","from","from","from","from","get_descriptor","get_status","into","into","into","into","into","ls_preamble","new","poll","release_pipe","reset","set_configuration","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","types","Attached","BitStuffing","Crc","DataSequence","Detached","Error","Error","Event","HostBus","InterruptPipe","InterruptPipe","Other","Resume","RxOverflow","RxTimeout","Sof","Stall","TransComplete","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","bus_ref","clone","clone","create_interrupt_pipe","enable_sof","eq","eq","format","format","from","from","from","interrupt_on_sof","into","into","into","ls_preamble","pipe_continue","poll","prepare_data_out","ptr","received_data","release_interrupt_pipe","reset_bus","reset_controller","set_recipient","sof_enabled","stop_transaction","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","write_data_in","write_data_out","write_data_out_prepared","write_setup","Adaptive","Asynchronouse","ConfigurationAttributes","ConfigurationDescriptor","Data","Descriptor","DeviceDescriptor","EndpointAddress","EndpointAttributes","EndpointDescriptor","Feedback","ImplicitFeedbackData","InterfaceDescriptor","NoSynchronization","Reserved","SynchronizationType","Synchronous","TYPE_CONFIGURATION","TYPE_DEVICE","TYPE_ENDPOINT","TYPE_INTERFACE","TYPE_STRING","UsageType","address","alternate_setting","attributes","attributes","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","clone","clone","clone","clone","clone","data","descriptor_type","device_class","device_protocol","device_release","device_sub_class","direction","format","format","format","format","format","format","format","from","from","from","from","from","from","from","from","from","from","id_product","id_vendor","index","interface_class","interface_index","interface_number","interface_protocol","interface_sub_class","interval","into","into","into","into","into","into","into","into","into","into","length","manufacturer_index","max_packet_size","max_packet_size","max_power","num_configurations","num_endpoints","num_interfaces","number","parse","product_index","remote_wakeup","self_powered","serial_number_index","synchronization_type","total_length","transfer_type","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","usage_type","usb_release","value","any_descriptor","bcd_16","configuration_descriptor","configuration_descriptor_length","device_descriptor","endpoint_descriptor","interface_descriptor","Driver","attached","completed_control","completed_in","completed_out","configure","configured","descriptor","detached","detector","hub","kbd","log","stall","SimpleDetector","attached","borrow","borrow_mut","configure","configured","default","descriptor","detached","from","into","try_from","try_into","type_id","CConnection","CEnable","CONNECTION","COverCurrent","CReset","CSuspend","C_CONNECTION","C_ENABLE","C_OVER_CURRENT","C_RESET","C_SUSPEND","Characteristics","Connection","ControlError","DeviceRemovable","ENABLE","Enable","HubAdded","HubDescriptor","HubDescriptor","HubDriver","HubError","HubEvent","HubRemoved","HubStatus","HubStatus","HubStatusChange","LOW_SPEED","LowSpeed","OVER_CURRENT","OverCurrent","POWER","PortFeature","PortFeatureClear","PortFeatureSet","PortStatus","PortStatus","PortStatusChange","Power","RESET","Reset","SUSPEND","Stall","Suspend","UnknownDevice","all","attached","bitand","bitand_assign","bitor","bitor_assign","bits","bitxor","bitxor_assign","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","characteristics","clear_port_feature","clone","clone","clone","clone","clone","clone","clone","clone","cmp","complement","completed_control","completed_in","completed_out","configure","configured","contains","control_current","descriptor","detached","device_removable","difference","empty","eq","eq","extend","fmt","fmt","fmt","fmt","fmt","format","format","format","format","format","format","format","from","from","from","from","from","from","from","from","from","from","from_bits","from_bits_truncate","from_bits_unchecked","from_iter","get_hub_descriptor","get_hub_status","get_port_status","hash","insert","intersection","intersects","into","into","into","into","into","into","into","into","into","is_all","is_empty","new","not","partial_cmp","port_count","power_on_to_good","remove","set","set_port_feature","stall","sub","sub_assign","symmetric_difference","take_event","toggle","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","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","union","CapsLock","Compose","ControlComplete","ControlError","DeviceAdded","DeviceRemoved","InputChanged","InputReport","Kana","KbdDriver","KbdError","KbdEvent","KbdLed","ModifierStatus","NumLock","ScrollLock","UnknownDevice","attached","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","completed_control","completed_in","completed_out","configure","configured","descriptor","detached","fmt","format","format","format","from","from","from","from","from","from","from","into","into","into","into","into","into","keypress","left_alt","left_ctrl","left_gui","left_shift","modifier_status","new","pressed_keys","right_alt","right_ctrl","right_gui","right_shift","set_idle","set_led","take_event","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","type_id","type_id","type_id","type_id","type_id","type_id","ATTACHED","COMPLETED_CONTROL","COMPLETED_IN","COMPLETED_OUT","CONFIGURE","CONFIGURED","DESCRIPTOR","DETACHED","EventMask","LogDriver","all","attached","bitand","bitand_assign","bitor","bitor_assign","bits","bitxor","bitxor_assign","borrow","borrow","borrow_mut","borrow_mut","clone","cmp","complement","completed_control","completed_in","completed_out","configure","configured","contains","descriptor","detached","difference","empty","eq","extend","fmt","fmt","fmt","fmt","fmt","format","from","from","from_bits","from_bits_truncate","from_bits_unchecked","from_iter","hash","insert","intersection","intersects","into","into","is_all","is_empty","new","not","partial_cmp","remove","set","stall","sub","sub_assign","symmetric_difference","toggle","try_from","try_from","try_into","try_into","type_id","type_id","union","Bcd16","Bulk","ConnectionSpeed","Control","DeviceAddress","Full","Interrupt","Isochronous","Low","SetupPacket","TransferType","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","eq","eq","eq","eq","format","format","format","from","from","from","from","from","index","into","into","into","into","into","length","new","request","request_type","to_digits","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","value"],"q":[[0,"usbh"],[81,"usbh::bus"],[146,"usbh::descriptor"],[291,"usbh::descriptor::parse"],[298,"usbh::driver"],[312,"usbh::driver::detector"],[326,"usbh::driver::hub"],[511,"usbh::driver::kbd"],[604,"usbh::driver::log"],[679,"usbh::types"]],"d":["","The host bus encountered an error","","Bus is currently busy talking to a device. Calling any …","Error initiating a control transfer","","","","An error happened during discovery.","Internal event type, used by poll and the enumeration …","A device is attached and the bus is available. The caller …","","A control transfer was initiated using an invalid PipeId.","There is no device attached. It does not make sense to do …","","Handle for a pipe","Result returned from UsbHost::poll.","","","","Entrypoint for the USB host stack","Indicates that the bus is currently busy with another …","","","","","","","","","","","Interface for host bus hardware","","","","","Initiate an IN transfer on the control endpoint of the …","Initiate an OUT transfer on the control endpoint of the …","Create a pipe for control transfers","Create a pipe for interrupt transfers","Types for (standard) descriptors","Interface for implementing drivers","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Initiate a Get_Descriptor (0x06) control IN transfer","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Initialize the USB host stack","Poll the USB host. This must be called reasonably often.","","Reset the entire host stack","Initiate a Set_Configuration (0x09) control OUT transfer","","","","","","","","","","","","","","","","Common types used throughout the crate","A new device was attached, with given speed","Bit stuffing rules were not followed","CRC mismatch","Data sequence error. Saw DATA0 when expecting DATA1 or …","The device is no longer attached","","An error has occured (details in the Error)","","Interface for host bus hardware","Result from create_interrupt_pipe","Data from interrupt pipe is available to be read or written","None of the above. Hardware specific error condition.","Device has resumed from sleep?","Data was received faster than it could be processed","Expected data to be received, but it did not arrive in time","A start-of-frame packet has been sent","Device sent a STALL. This usually means that the device …","A control transaction (SETUP, DATA IN or DATA OUT) has …","","","","","","","Reference for this pipe generated by the host bus","","","Create an interrupt pipe","Enable sending SOF (for full-speed) or keep-alive (for …","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Enable/disable interrupt on SOF","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Signal that a pipe can continue transfers","Check if there is an event pending on the bus, if there is …","Load the given data into the output buffer","Pointer to the buffer for this pipe","Access the input buffer for a recent transfer","Release a pipe created with create_interrupt_pipe","Reset the bus, but keep the controller initialized.","Reset the controller into it’s initial state.","Set device address, endpoint and transfer type for an …","Check if SOF packets are currently enabled","Stop current transaction, if there is one in progress","","","","","","","","","","Write a DATA IN packet to the bus, then receive length …","Write a DATA OUT packet to the bus, after loading the …","Write a DATA OUT packet to the bus, assuming the buffers …","Write a SETUP packet to the bus","","","","The configuration descriptor describes information about a …","","Outer framing of a descriptor","A device descriptor describes general information about a …","Address of an endpoint","Attributes of an endpoint","Each endpoint used for an interface has its own descriptor.","","","The interface descriptor describes a specific interface …","","","Synchronization type for an Isochronous endpoint","","descriptor_type identifying a ConfigurationDescriptor","descriptor_type identifying a DeviceDescriptor","descriptor_type identifying an EndpointDescriptor","descriptor_type identifying an InterfaceDescriptor","descriptor_type identifying a StringDescriptor (not yet …","Usage type for an Isochronous endpoint","The address of the endpoint on the USB device described by …","Value used to select this alternate setting for the …","Configuration characteristics","This field describes the endpoint’s attributes when it …","","","","","","","","","","","","","","","","","","","","","","","","","","Remaining data of the descriptor. Usually length - 2 bytes …","Type of descriptor. If this is a standard descriptor, it …","Class code (assigned by the USB-IF).","Protocol code (assigned by the USB-IF). These codes are …","Device release number in binary-coded decimal","Subclass code (assigned by the USB-IF).","Direction of the endpoint","","","","","","","","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.","Product ID (assigned by the manufacturer)","Vendor ID (assigned by the USB-IF)","Index of string descriptor describing this configuration","Class code (assigned by the USB-IF).","Index of string descriptor describing this interface","Number of this interface.","Protocol code (assigned by the USB).","Subclass code (assigned by the USB-IF).","Interval for polling endpoint for data transfers.","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).","Total length of the descriptor, including this length byte …","Index of string descriptor describing manufacturer","Maximum packet size for endpoint zero","Maximum packet size this endpoint is capable of sending or …","Maximum power consumption of the USB device from the bus …","Number of possible configurations","Number of endpoints used by this interface (excluding …","Number of interfaces supported by this configuration","Endpoint number","","Index of string descriptor describing product","Device supports remote wakeup","A device configuration reports whether the configuration …","Index of string descriptor describing the device’s …","Synchronization type. Only valid for Isochronous endpoint.","Total length of data returned for this configuration.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Usage type. Only valid for Isochronous endpoint.","USB Specification Release Number in Binary-Coded Decimal …","Value to use as an argument to the SetConfiguration() …","Parse outer framing of a descriptor","Parses a 16-bit binary coded decimal value","Parse descriptor data for a configuration","Parse only the total_length from a (partial) configuration …","Parse descriptor data for a device","Parse descriptor data for an endpoint","Parse descriptor data for an interface","The Driver trait","New device was attached, and got assigned the given …","Called when a control transfer was completed on the given …","Called when data was received on the given IN pipe","Called when new data is needed for the given OUT pipe","The host is asking the driver to configure the device.","Informs the driver that a given configuration was selected …","A descriptor was received for the device","The device with the given address was detached.","Helpers for detecting USB devices from drivers","","","","Called when a device sends a STALL","","","","","","","","","","Returns the argument unchanged.","Calls U::from(self).","","","","","","","","","","","","","","","","","Error initiating control transfer","","","","","","","A Driver which logs various events","Error type for interactions with the driver","","","","","","","","","","","","","","","","","","","","","","","The given DeviceAddress is not known.","Returns the set containing all flags.","","Returns the intersection between the two sets of flags.","Disables all flags disabled in the set.","Returns the union of the two sets of flags.","Adds the set of flags.","Returns the raw value of the flags currently stored.","Returns the left flags, but with all the right flags …","Toggles the set of flags.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the complement of this set of flags.","","","","","","Returns true if all of the flags in other are contained …","","","","","Returns the difference between the flags in self and other.","Returns an empty set of flags.","","","","","","","","","","","","","","","","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.","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, preserving all …","","","","","","Inserts the specified flags in-place.","Returns the intersection between the flags in self and …","Returns true if there are flags common to both self and …","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).","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","","Returns the complement of this set of flags.","","","","Removes the specified flags in-place.","Inserts or removes the specified flags depending on the …","","","Returns the set difference of the two sets of flags.","Disables all flags enabled in the set.","Returns the symmetric difference between the flags in self …","","Toggles the specified flags in-place.","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the union of between the flags in self and other.","","","A control transfer has completed.","Error initiating control transfer","A new keyboard was detected & configured, with given …","A keyboard was removed","The input report changed for one of the devices.","Represents an input report, received from a keyboard","","Driver for boot keyboards","Error type for interactions with the driver","Events related to attached keyboard(s)","Identifies the five LEDs that a boot keyboard can support","","","","The given DeviceAddress is not known.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","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).","","Is left Alt pressed?","Is left Ctrl pressed?","Is left Gui pressed?","Is left Shift pressed?","Status of modifier keys","","","Is right Alt pressed?","Is right Ctrl pressed?","Is right Gui pressed?","Is right Shift pressed?","Set interval for idle reports","Set the given KbdLed to the specified state.","Returns the last keyboard event that occurred (if any) and …","","","","","","","","","","","","","","","","","","","","","","","","","","","","Used to select which events are logged by the LogDriver","A Driver which logs various events","Returns the set containing all flags.","","Returns the intersection between the two sets of flags.","Disables all flags disabled in the set.","Returns the union of the two sets of flags.","Adds the set of flags.","Returns the raw value of the flags currently stored.","Returns the left flags, but with all the right flags …","Toggles the set of flags.","","","","","","","Returns the complement of this set of flags.","","","","","","Returns true if all of the flags in other are contained …","","","Returns the difference between the flags in self and other.","Returns an empty set of flags.","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, preserving all …","","","Inserts the specified flags in-place.","Returns the intersection between the flags in self and …","Returns true if there are flags common to both self and …","Calls U::from(self).","Calls U::from(self).","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","","Returns the complement of this set of flags.","","Removes the specified flags in-place.","Inserts or removes the specified flags depending on the …","","Returns the set difference of the two sets of flags.","Disables all flags enabled in the set.","Returns the symmetric difference between the flags in self …","Toggles the specified flags in-place.","","","","","","","Returns the union of between the flags in self and other.","Represents a 16-bit binary-coded-decimal value","","Refers to the speed at which a device operates","","An address that was assigned to a device by the host.","USB 1.0 full speed","","","USB 1.0 low speed","Represents a setup packet","Represents one of the four transfer types that USB supports","","","","","","","","","","","","","","","","","","","","","","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).","","Construct a setup packet for for a control transfer","","","Returns the four contained digits as separate numbers","","","","","","","","","","","","","","","",""],"i":[4,18,4,18,0,4,4,4,18,0,18,4,3,18,4,0,0,4,4,4,0,3,18,3,4,2,5,18,3,4,2,5,0,2,3,4,5,2,2,2,2,0,0,3,5,4,5,18,3,4,2,5,2,2,18,3,4,2,5,2,2,2,2,2,2,18,3,4,2,5,18,3,4,2,5,18,3,4,2,5,0,20,21,21,21,20,0,20,0,0,0,20,21,20,21,21,20,20,20,22,20,21,22,20,21,22,20,21,1,1,20,21,20,21,22,20,21,1,22,20,21,1,1,1,1,22,1,1,1,1,1,1,1,22,20,21,22,20,21,22,20,21,1,1,1,1,28,28,0,0,29,0,0,0,0,0,29,29,0,28,29,0,28,0,0,0,0,0,0,33,32,31,33,34,30,31,25,32,33,26,27,28,29,34,30,31,25,32,33,26,27,28,29,25,26,27,28,29,34,34,30,30,30,30,26,30,31,25,32,33,26,27,34,30,31,25,32,33,26,27,28,29,30,30,31,32,32,32,32,32,33,34,30,31,25,32,33,26,27,28,29,34,30,30,33,31,30,32,31,26,0,30,25,25,30,27,31,27,34,30,31,25,32,33,26,27,28,29,34,30,31,25,32,33,26,27,28,29,34,30,31,25,32,33,26,27,28,29,27,30,31,0,0,0,0,0,0,0,0,17,17,17,17,17,17,17,17,0,0,0,0,17,0,38,38,38,38,38,38,38,38,38,38,38,38,38,42,42,39,42,42,42,39,39,39,39,39,0,42,43,0,39,42,47,0,47,0,0,0,47,0,47,47,39,42,39,42,39,0,47,47,0,47,47,42,39,42,39,47,42,43,39,40,39,39,39,39,39,39,39,40,44,45,46,42,47,39,48,43,40,44,45,46,42,47,39,48,43,44,40,44,45,46,42,47,39,48,43,39,39,40,40,40,40,40,39,44,40,40,44,39,39,42,39,39,39,39,39,39,39,44,45,46,42,47,39,48,40,44,45,46,42,47,39,48,43,43,39,39,39,39,40,40,40,39,39,39,39,40,44,45,46,42,47,39,48,43,39,39,40,39,39,44,44,39,39,40,40,39,39,39,40,39,40,44,45,46,42,47,39,48,43,40,44,45,46,42,47,39,48,43,40,44,45,46,42,47,39,48,43,39,58,58,57,59,57,57,57,0,58,0,0,0,0,0,58,58,59,54,54,55,56,57,58,59,54,55,56,57,58,59,55,56,57,58,59,54,54,54,54,54,54,54,56,55,56,57,54,55,56,57,58,59,59,54,55,56,57,58,59,55,56,56,56,56,55,54,55,56,56,56,56,54,54,54,54,55,55,56,57,58,59,54,55,56,57,58,59,54,55,56,57,58,59,61,61,61,61,61,61,61,61,0,0,61,62,61,61,61,61,61,61,61,62,61,62,61,61,61,61,62,62,62,62,62,61,62,62,61,61,61,61,61,61,61,61,61,61,62,61,61,61,61,61,61,61,61,61,62,61,61,61,62,61,61,61,61,62,61,61,61,61,62,61,62,61,62,61,61,0,24,0,24,0,37,24,24,37,0,0,8,6,36,37,24,8,6,36,37,24,6,36,37,24,6,36,37,24,6,36,37,8,6,36,37,24,8,8,6,36,37,24,8,8,8,8,36,8,6,36,37,24,8,6,36,37,24,8,6,36,37,24,8],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[[2,[1]]],1],[3,3],[4,4],[5,5],[[[2,[1]],[7,[6]],[7,[5]],8],[[9,[3]]]],[[[2,[1]],[7,[6]],[7,[5]],8,[11,[10]]],[[9,[3]]]],[[[2,[1]],6],[[7,[5]]]],[[[2,[1]],6,10,12,13,10],[[7,[5]]]],0,0,[[3,3],14],[[5,5],14],[[4,15]],[[5,15]],[[]],[[]],[[]],[[]],[[]],[[[2,[1]],[7,[6]],[7,[5]],16,10,10,13],[[9,[3]]]],[[[2,[1]],6,5,16],[[9,[3]]]],[[]],[[]],[[]],[[]],[[]],[[[2,[1]],14]],[1,[[2,[1]]]],[[[2,[1]],[11,[17]]],18],[[[2,[1]],5]],[[[2,[1]]]],[[[2,[1]],6,[7,[5]],10],[[9,[3]]]],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],19],[[],19],[[],19],[[],19],[[],19],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],0,[20,20],[21,21],[[6,10,12,13,10],[[7,[22]]]],[[]],[[20,20],14],[[21,21],14],[[20,15]],[[21,15]],[[]],[[]],[[]],[14],[[]],[[]],[[]],[14],[10],[[],[[7,[20]]]],[[[11,[10]]]],0,[23,[[11,[10]]]],[10],[[]],[[]],[[[7,[6]],10,24]],[[],14],[[]],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],19],[[],19],[[],19],[[13,14]],[[[11,[10]]]],[[]],[8],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,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[25,25],[26,26],[27,27],[28,28],[29,29],0,0,0,0,0,0,[26,12],[[30,15]],[[31,15]],[[25,15]],[[32,15]],[[33,15]],[[26,15]],[[27,15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,[26,10],0,0,[25,14],[25,14],0,[27,28],0,[27,24],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[27,29],0,0,[[[11,[10]]],[[35,[[11,[10]],34]]]],[[[11,[10]]],[[35,[[11,[10]],36]]]],[[[11,[10]]],[[35,[[11,[10]],31]]]],[[[11,[10]]],[[35,[[11,[10]],13]]]],[[[11,[10]]],[[35,[[11,[10]],30]]]],[[[11,[10]]],[[35,[[11,[10]],33]]]],[[[11,[10]]],[[35,[[11,[10]],32]]]],0,[[6,37]],[[6,5,[7,[[11,[10]]]]]],[[6,5,[11,[10]]]],[[6,5,[11,[10]]]],[6,[[7,[10]]]],[[6,10,2]],[[6,10,[11,[10]]]],[6],0,0,0,0,[6],0,[[38,6]],[[]],[[]],[[38,6],[[7,[10]]]],[[38,6,10],7],[[],38],[[38,6,10,[11,[10]]]],[[38,6]],[[]],[[]],[[],9],[[],9],[[],19],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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],39],[[40,6,37]],[[39,39],39],[[39,39]],[[39,39],39],[[39,39]],[39,41],[[39,39],39],[[39,39]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[40,6,10,42,[2,[1]]],[[9,[43]]]],[44,44],[45,45],[46,46],[42,42],[47,47],[39,39],[48,48],[43,43],[[39,39],49],[39,39],[[40,6,5,[7,[[11,[10]]]]]],[[40,6,5,[11,[10]]]],[[40,6,5,[11,[10]]]],[[40,6],[[7,[10]]]],[[40,6,10,[2,[1]]]],[[39,39],14],0,[[40,6,10,[11,[10]]]],[[40,6]],0,[[39,39],39],[[],39],[[42,42],14],[[39,39],14],[[39,50]],[[39,51],52],[[39,51],52],[[39,51],52],[[39,51],52],[[39,51],52],[[44,15]],[[45,15]],[[46,15]],[[42,15]],[[47,15]],[[39,15]],[[48,15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[3,43],[[]],[41,[[7,[39]]]],[41,39],[41,39],[50,39],[[40,6,[2,[1]]],[[9,[43]]]],[[40,6,[2,[1]]],[[9,[43]]]],[[40,6,10,[2,[1]]],[[9,[43]]]],[[39,53]],[[39,39]],[[39,39],39],[[39,39],14],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[39,14],[39,14],[[],40],[39,39],[[39,39],[[7,[49]]]],0,0,[[39,39]],[[39,39,14]],[[40,6,10,42,[2,[1]]],[[9,[43]]]],[[40,6]],[[39,39],39],[[39,39]],[[39,39],39],[40,[[7,[47]]]],[[39,39]],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[39,39],39],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[54,6,37]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[55,55],[56,56],[57,57],[58,58],[59,59],[[54,6,5,[7,[[11,[10]]]]]],[[54,6,5,[11,[10]]]],[[54,6,5,[11,[10]]]],[[54,6],[[7,[10]]]],[[54,6,10,[2,[1]]]],[[54,6,10,[11,[10]]]],[[54,6]],[[56,51],52],[[55,15]],[[56,15]],[[57,15]],[[]],[[]],[[]],[[]],[[]],[3,59],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[56,14],[56,14],[56,14],[56,14],0,[[],54],[55,60],[56,14],[56,14],[56,14],[56,14],[[54,6,10,[2,[1]]],[[9,[59]]]],[[54,6,58,14,[2,[1]]],[[9,[59]]]],[54,[[7,[57]]]],[[],9],[[],9],[[[11,[10]]],[[9,[55]]]],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],0,0,0,0,0,0,0,0,0,0,[[],61],[[62,6,37]],[[61,61],61],[[61,61]],[[61,61],61],[[61,61]],[61,10],[[61,61],61],[[61,61]],[[]],[[]],[[]],[[]],[61,61],[[61,61],49],[61,61],[[62,6,5,[7,[[11,[10]]]]]],[[62,6,5,[11,[10]]]],[[62,6,5,[11,[10]]]],[[62,6],[[7,[10]]]],[[62,6,10,[2,[1]]]],[[61,61],14],[[62,6,10,[11,[10]]]],[[62,6]],[[61,61],61],[[],61],[[61,61],14],[[61,50]],[[61,51],52],[[61,51],52],[[61,51],52],[[61,51],52],[[61,51],52],[[61,15]],[[]],[[]],[10,[[7,[61]]]],[10,61],[10,61],[50,61],[[61,53]],[[61,61]],[[61,61],61],[[61,61],14],[[]],[[]],[61,14],[61,14],[61,62],[61,61],[[61,61],[[7,[49]]]],[[61,61]],[[61,61,14]],[[62,6]],[[61,61],61],[[61,61]],[[61,61],61],[[61,61]],[[],9],[[],9],[[],9],[[],9],[[],19],[[],19],[[61,61],61],0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[6,6],[36,36],[37,37],[24,24],[[6,6],14],[[36,36],14],[[37,37],14],[[24,24],14],[[6,15]],[[36,15]],[[37,15]],[[]],[[]],[[]],[[]],[[]],0,[[]],[[]],[[]],[[]],[[]],0,[[12,63,16,10,13,13,13],8],0,0,[36,[[64,[10]]]],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],19],[[],19],[[],19],[[],19],[[],19],0],"c":[],"p":[[8,"HostBus"],[3,"UsbHost"],[4,"ControlError"],[4,"Event"],[3,"PipeId"],[3,"DeviceAddress"],[4,"Option"],[3,"SetupPacket"],[4,"Result"],[15,"u8"],[15,"slice"],[4,"UsbDirection"],[15,"u16"],[15,"bool"],[3,"Formatter"],[4,"Recipient"],[8,"Driver"],[4,"PollResult"],[3,"TypeId"],[4,"Event"],[4,"Error"],[3,"InterruptPipe"],[15,"usize"],[4,"TransferType"],[3,"ConfigurationAttributes"],[3,"EndpointAddress"],[3,"EndpointAttributes"],[4,"SynchronizationType"],[4,"UsageType"],[3,"DeviceDescriptor"],[3,"ConfigurationDescriptor"],[3,"InterfaceDescriptor"],[3,"EndpointDescriptor"],[3,"Descriptor"],[6,"IResult"],[3,"Bcd16"],[4,"ConnectionSpeed"],[3,"SimpleDetector"],[3,"PortStatus"],[3,"HubDriver"],[15,"u32"],[4,"PortFeature"],[4,"HubError"],[3,"HubDescriptor"],[3,"Characteristics"],[3,"DeviceRemovable"],[4,"HubEvent"],[3,"HubStatus"],[4,"Ordering"],[8,"IntoIterator"],[3,"Formatter"],[6,"Result"],[8,"Hasher"],[3,"KbdDriver"],[3,"InputReport"],[3,"ModifierStatus"],[4,"KbdEvent"],[4,"KbdLed"],[4,"KbdError"],[8,"Iterator"],[3,"EventMask"],[3,"LogDriver"],[4,"RequestType"],[15,"array"]]}\ +"usbh":{"doc":"Experimental host-side USB stack for embedded devices.","t":"NNNNENNNNENNNNNDENNNDNLLLLLLLLLLALLLLLLLLAALLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLANNNNNENEIDNNNNNNNNLLLLLLMLLKKLLLLLLLKLLLKKKKMKKKKKKKLLLLLLLLLKLKKNNDDNDDDDDNNDNNENRRRRREMMMMLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMLLLLLLLLLLLLLLLLLLMMMMMMMMMLLLLLLLLLLMMMMMMMMLAMLLMLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMFFFFFFFIKKKKKKKKAAAALDLLLLLLLLLLLLLNNSNNNSSSSSDNNDSNNDNDEENDNNSNSNSENNDNNNSNSNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLMLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNDNDEEEDNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLMLLLLLLLLLLLLLLLLLLLLLLLLLLLLSSSSSSSSDDLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLDNENDNNNNDELLLLLLLLLLLLLLLLLLLLLLLLLLMLLLLLMLMMLLLLLLLLLLLLLLLLM","n":["Attached","BusError","BusError","Busy","ControlError","ControlInData","ControlOutComplete","Detached","DiscoveryError","Event","Idle","InterruptPipe","InvalidPipe","NoDevice","None","PipeId","PollResult","Resume","Sof","Stall","UsbHost","WouldBlock","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","bus","bus","clone","clone","clone","control_in","control_out","create_control_pipe","create_interrupt_pipe","descriptor","driver","eq","eq","format","format","from","from","from","from","from","get_descriptor","get_status","into","into","into","into","into","ls_preamble","new","poll","release_pipe","reset","set_configuration","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","types","Attached","BitStuffing","Crc","DataSequence","Detached","Error","Error","Event","HostBus","InterruptPipe","InterruptPipe","Other","Resume","RxOverflow","RxTimeout","Sof","Stall","TransComplete","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","bus_ref","clone","clone","create_interrupt_pipe","enable_sof","eq","eq","format","format","from","from","from","interrupt_on_sof","into","into","into","ls_preamble","pipe_continue","poll","prepare_data_out","ptr","received_data","release_interrupt_pipe","reset_bus","reset_controller","set_recipient","sof_enabled","stop_transaction","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","write_data_in","write_data_out","write_data_out_prepared","write_setup","Adaptive","Asynchronouse","ConfigurationAttributes","ConfigurationDescriptor","Data","Descriptor","DeviceDescriptor","EndpointAddress","EndpointAttributes","EndpointDescriptor","Feedback","ImplicitFeedbackData","InterfaceDescriptor","NoSynchronization","Reserved","SynchronizationType","Synchronous","TYPE_CONFIGURATION","TYPE_DEVICE","TYPE_ENDPOINT","TYPE_INTERFACE","TYPE_STRING","UsageType","address","alternate_setting","attributes","attributes","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","clone","clone","clone","clone","clone","data","descriptor_type","device_class","device_protocol","device_release","device_sub_class","direction","format","format","format","format","format","format","format","from","from","from","from","from","from","from","from","from","from","id_product","id_vendor","index","interface_class","interface_index","interface_number","interface_protocol","interface_sub_class","interval","into","into","into","into","into","into","into","into","into","into","length","manufacturer_index","max_packet_size","max_packet_size","max_power","num_configurations","num_endpoints","num_interfaces","number","parse","product_index","remote_wakeup","self_powered","serial_number_index","synchronization_type","total_length","transfer_type","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","usage_type","usb_release","value","any_descriptor","bcd_16","configuration_descriptor","configuration_descriptor_length","device_descriptor","endpoint_descriptor","interface_descriptor","Driver","attached","completed_control","completed_in","completed_out","configure","configured","descriptor","detached","detector","hub","kbd","log","stall","SimpleDetector","attached","borrow","borrow_mut","configure","configured","default","descriptor","detached","from","into","try_from","try_into","type_id","CConnection","CEnable","CONNECTION","COverCurrent","CReset","CSuspend","C_CONNECTION","C_ENABLE","C_OVER_CURRENT","C_RESET","C_SUSPEND","Characteristics","Connection","ControlError","DeviceRemovable","ENABLE","Enable","HubAdded","HubDescriptor","HubDescriptor","HubDriver","HubError","HubEvent","HubRemoved","HubStatus","HubStatus","HubStatusChange","LOW_SPEED","LowSpeed","OVER_CURRENT","OverCurrent","POWER","PortFeature","PortFeatureClear","PortFeatureSet","PortStatus","PortStatus","PortStatusChange","Power","RESET","Reset","SUSPEND","Stall","Suspend","UnknownDevice","all","attached","bitand","bitand_assign","bitor","bitor_assign","bits","bitxor","bitxor_assign","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","characteristics","clear_port_feature","clone","clone","clone","clone","clone","clone","clone","clone","cmp","complement","completed_control","completed_in","completed_out","configure","configured","contains","control_current","descriptor","detached","device_removable","difference","empty","eq","eq","extend","fmt","fmt","fmt","fmt","fmt","format","format","format","format","format","format","format","from","from","from","from","from","from","from","from","from","from","from_bits","from_bits_truncate","from_bits_unchecked","from_iter","get_hub_descriptor","get_hub_status","get_port_status","hash","insert","intersection","intersects","into","into","into","into","into","into","into","into","into","is_all","is_empty","new","not","partial_cmp","port_count","power_on_to_good","remove","set","set_port_feature","stall","sub","sub_assign","symmetric_difference","take_event","toggle","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","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","union","CapsLock","Compose","ControlComplete","ControlError","DeviceAdded","DeviceRemoved","InputChanged","InputReport","Kana","KbdDriver","KbdError","KbdEvent","KbdLed","ModifierStatus","NumLock","ScrollLock","UnknownDevice","attached","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","completed_control","completed_in","completed_out","configure","configured","descriptor","detached","fmt","format","format","format","from","from","from","from","from","from","from","into","into","into","into","into","into","keypress","left_alt","left_ctrl","left_gui","left_shift","modifier_status","new","pressed_keys","right_alt","right_ctrl","right_gui","right_shift","set_idle","set_led","take_event","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","type_id","type_id","type_id","type_id","type_id","type_id","ATTACHED","COMPLETED_CONTROL","COMPLETED_IN","COMPLETED_OUT","CONFIGURE","CONFIGURED","DESCRIPTOR","DETACHED","EventMask","LogDriver","all","attached","bitand","bitand_assign","bitor","bitor_assign","bits","bitxor","bitxor_assign","borrow","borrow","borrow_mut","borrow_mut","clone","cmp","complement","completed_control","completed_in","completed_out","configure","configured","contains","descriptor","detached","difference","empty","eq","extend","fmt","fmt","fmt","fmt","fmt","format","from","from","from_bits","from_bits_truncate","from_bits_unchecked","from_iter","hash","insert","intersection","intersects","into","into","is_all","is_empty","new","not","partial_cmp","remove","set","stall","sub","sub_assign","symmetric_difference","toggle","try_from","try_from","try_into","try_into","type_id","type_id","union","Bcd16","Bulk","ConnectionSpeed","Control","DeviceAddress","Full","Interrupt","Isochronous","Low","SetupPacket","TransferType","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","eq","eq","eq","eq","format","format","format","from","from","from","from","from","index","into","into","into","into","into","length","new","request","request_type","to_digits","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","value"],"q":[[0,"usbh"],[81,"usbh::bus"],[146,"usbh::descriptor"],[291,"usbh::descriptor::parse"],[298,"usbh::driver"],[312,"usbh::driver::detector"],[326,"usbh::driver::hub"],[511,"usbh::driver::kbd"],[604,"usbh::driver::log"],[679,"usbh::types"]],"d":["","The host bus encountered an error","","Bus is currently busy talking to a device. Calling any …","Error initiating a control transfer","","","","An error happened during discovery.","Internal event type, used by poll and the enumeration …","A device is attached and the bus is available. The caller …","","A control transfer was initiated using an invalid PipeId.","There is no device attached. It does not make sense to do …","","Handle for a pipe","Result returned from UsbHost::poll.","","","","Entrypoint for the USB host stack","Indicates that the bus is currently busy with another …","","","","","","","","","","","Interface for host bus hardware","","","","","Initiate an IN transfer on the control endpoint of the …","Initiate an OUT transfer on the control endpoint of the …","Create a pipe for control transfers","Create a pipe for interrupt transfers","Types for (standard) descriptors","Interface for implementing drivers","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Initiate a Get_Descriptor (0x06) control IN transfer","","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Initialize the USB host stack","Poll the USB host. This must be called reasonably often.","","Reset the entire host stack","Initiate a Set_Configuration (0x09) control OUT transfer","","","","","","","","","","","","","","","","Common types used throughout the crate","A new device was attached, with given speed","Bit stuffing rules were not followed","CRC mismatch","Data sequence error. Saw DATA0 when expecting DATA1 or …","The device is no longer attached","","An error has occured (details in the Error)","","Interface for host bus hardware","Result from create_interrupt_pipe","Data from interrupt pipe is available to be read or written","None of the above. Hardware specific error condition.","Device has resumed from sleep?","Data was received faster than it could be processed","Expected data to be received, but it did not arrive in time","A start-of-frame packet has been sent","Device sent a STALL. This usually means that the device …","A control transaction (SETUP, DATA IN or DATA OUT) has …","","","","","","","Reference for this pipe generated by the host bus","","","Create an interrupt pipe","Enable sending SOF (for full-speed) or keep-alive (for …","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Returns the argument unchanged.","Enable/disable interrupt on SOF","Calls U::from(self).","Calls U::from(self).","Calls U::from(self).","","Signal that a pipe can continue transfers","Check if there is an event pending on the bus, if there is …","Load the given data into the output buffer","Pointer to the buffer for this pipe","Access the input buffer for a recent transfer","Release a pipe created with create_interrupt_pipe","Reset the bus, but keep the controller initialized.","Reset the controller into it’s initial state.","Set device address, endpoint and transfer type for an …","Check if SOF packets are currently enabled","Stop current transaction, if there is one in progress","","","","","","","","","","Write a DATA IN packet to the bus, then receive length …","Write a DATA OUT packet to the bus, after loading the …","Write a DATA OUT packet to the bus, assuming the buffers …","Write a SETUP packet to the bus","","","","The configuration descriptor describes information about a …","","Outer framing of a descriptor","A device descriptor describes general information about a …","Address of an endpoint","Attributes of an endpoint","Each endpoint used for an interface has its own descriptor.","","","The interface descriptor describes a specific interface …","","","Synchronization type for an Isochronous endpoint","","descriptor_type identifying a ConfigurationDescriptor","descriptor_type identifying a DeviceDescriptor","descriptor_type identifying an EndpointDescriptor","descriptor_type identifying an InterfaceDescriptor","descriptor_type identifying a StringDescriptor (not yet …","Usage type for an Isochronous endpoint","The address of the endpoint on the USB device described by …","Value used to select this alternate setting for the …","Configuration characteristics","This field describes the endpoint’s attributes when it …","","","","","","","","","","","","","","","","","","","","","","","","","","Remaining data of the descriptor. Usually length - 2 bytes …","Type of descriptor. If this is a standard descriptor, it …","Class code (assigned by the USB-IF).","Protocol code (assigned by the USB-IF). These codes are …","Device release number in binary-coded decimal","Subclass code (assigned by the USB-IF).","Direction of the endpoint","","","","","","","","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.","Product ID (assigned by the manufacturer)","Vendor ID (assigned by the USB-IF)","Index of string descriptor describing this configuration","Class code (assigned by the USB-IF).","Index of string descriptor describing this interface","Number of this interface.","Protocol code (assigned by the USB).","Subclass code (assigned by the USB-IF).","Interval for polling endpoint for data transfers.","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).","Total length of the descriptor, including this length byte …","Index of string descriptor describing manufacturer","Maximum packet size for endpoint zero","Maximum packet size this endpoint is capable of sending or …","Maximum power consumption of the USB device from the bus …","Number of possible configurations","Number of endpoints used by this interface (excluding …","Number of interfaces supported by this configuration","Endpoint number","","Index of string descriptor describing product","Device supports remote wakeup","A device configuration reports whether the configuration …","Index of string descriptor describing the device’s …","Synchronization type. Only valid for Isochronous endpoint.","Total length of data returned for this configuration.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Usage type. Only valid for Isochronous endpoint.","USB Specification Release Number in Binary-Coded Decimal …","Value to use as an argument to the SetConfiguration() …","Parse outer framing of a descriptor","Parses a 16-bit binary coded decimal value","Parse descriptor data for a configuration","Parse only the total_length from a (partial) configuration …","Parse descriptor data for a device","Parse descriptor data for an endpoint","Parse descriptor data for an interface","The Driver trait","New device was attached, and got assigned the given …","Called when a control transfer was completed on the given …","Called when data was received on the given IN pipe","Called when new data is needed for the given OUT pipe","The host is asking the driver to configure the device.","Informs the driver that a given configuration was selected …","A descriptor was received for the device","The device with the given address was detached.","Helpers for detecting USB devices from drivers","","","","Called when a device sends a STALL","","","","","","","","","","Returns the argument unchanged.","Calls U::from(self).","","","","","","","","","","","","","","","","","Error initiating control transfer","","","","","","","A Driver which logs various events","Error type for interactions with the driver","","","","","","","","","","","","","","","","","","","","","","","The given DeviceAddress is not known.","Returns the set containing all flags.","","Returns the intersection between the two sets of flags.","Disables all flags disabled in the set.","Returns the union of the two sets of flags.","Adds the set of flags.","Returns the raw value of the flags currently stored.","Returns the left flags, but with all the right flags …","Toggles the set of flags.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the complement of this set of flags.","","","","","","Returns true if all of the flags in other are contained …","","","","","Returns the difference between the flags in self and other.","Returns an empty set of flags.","","","","","","","","","","","","","","","","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.","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, preserving all …","","","","","","Inserts the specified flags in-place.","Returns the intersection between the flags in self and …","Returns true if there are flags common to both self and …","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).","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","","Returns the complement of this set of flags.","","","","Removes the specified flags in-place.","Inserts or removes the specified flags depending on the …","","","Returns the set difference of the two sets of flags.","Disables all flags enabled in the set.","Returns the symmetric difference between the flags in self …","","Toggles the specified flags in-place.","","","","","","","","","","","","","","","","","","","","","","","","","","","","Returns the union of between the flags in self and other.","","","A control transfer has completed.","Error initiating control transfer","A new keyboard was detected & configured, with given …","A keyboard was removed","The input report changed for one of the devices.","Represents an input report, received from a keyboard","","Driver for boot keyboards","Error type for interactions with the driver","Events related to attached keyboard(s)","Identifies the five LEDs that a boot keyboard can support","","","","The given DeviceAddress is not known.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","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).","","Is left Alt pressed?","Is left Ctrl pressed?","Is left Gui pressed?","Is left Shift pressed?","Status of modifier keys","","","Is right Alt pressed?","Is right Ctrl pressed?","Is right Gui pressed?","Is right Shift pressed?","Set interval for idle reports","Set the given KbdLed to the specified state.","Returns the last keyboard event that occurred (if any) and …","","","","","","","","","","","","","","","","","","","","","","","","","","","","Used to select which events are logged by the LogDriver","A Driver which logs various events","Returns the set containing all flags.","","Returns the intersection between the two sets of flags.","Disables all flags disabled in the set.","Returns the union of the two sets of flags.","Adds the set of flags.","Returns the raw value of the flags currently stored.","Returns the left flags, but with all the right flags …","Toggles the set of flags.","","","","","","","Returns the complement of this set of flags.","","","","","","Returns true if all of the flags in other are contained …","","","Returns the difference between the flags in self and other.","Returns an empty set of flags.","","","","","","","","","Returns the argument unchanged.","Returns the argument unchanged.","Convert from underlying bit representation, unless that …","Convert from underlying bit representation, dropping any …","Convert from underlying bit representation, preserving all …","","","Inserts the specified flags in-place.","Returns the intersection between the flags in self and …","Returns true if there are flags common to both self and …","Calls U::from(self).","Calls U::from(self).","Returns true if all flags are currently set.","Returns true if no flags are currently stored.","","Returns the complement of this set of flags.","","Removes the specified flags in-place.","Inserts or removes the specified flags depending on the …","","Returns the set difference of the two sets of flags.","Disables all flags enabled in the set.","Returns the symmetric difference between the flags in self …","Toggles the specified flags in-place.","","","","","","","Returns the union of between the flags in self and other.","Represents a 16-bit binary-coded-decimal value","","Refers to the speed at which a device operates","","An address that was assigned to a device by the host.","USB 1.0 full speed","","","USB 1.0 low speed","Represents a setup packet","Represents one of the four transfer types that USB supports","","","","","","","","","","","","","","","","","","","","","","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).","","Construct a setup packet for for a control transfer","","","Returns the four contained digits as separate numbers","","","","","","","","","","","","","","","",""],"i":[4,18,4,18,0,4,4,4,18,0,18,4,3,18,4,0,0,4,4,4,0,3,18,3,4,2,5,18,3,4,2,5,0,2,3,4,5,2,2,2,2,0,0,3,5,4,5,18,3,4,2,5,2,2,18,3,4,2,5,2,2,2,2,2,2,18,3,4,2,5,18,3,4,2,5,18,3,4,2,5,0,20,21,21,21,20,0,20,0,0,0,20,21,20,21,21,20,20,20,22,20,21,22,20,21,22,20,21,1,1,20,21,20,21,22,20,21,1,22,20,21,1,1,1,1,22,1,1,1,1,1,1,1,22,20,21,22,20,21,22,20,21,1,1,1,1,28,28,0,0,29,0,0,0,0,0,29,29,0,28,29,0,28,0,0,0,0,0,0,33,32,31,33,34,30,31,25,32,33,26,27,28,29,34,30,31,25,32,33,26,27,28,29,25,26,27,28,29,34,34,30,30,30,30,26,30,31,25,32,33,26,27,34,30,31,25,32,33,26,27,28,29,30,30,31,32,32,32,32,32,33,34,30,31,25,32,33,26,27,28,29,34,30,30,33,31,30,32,31,26,0,30,25,25,30,27,31,27,34,30,31,25,32,33,26,27,28,29,34,30,31,25,32,33,26,27,28,29,34,30,31,25,32,33,26,27,28,29,27,30,31,0,0,0,0,0,0,0,0,17,17,17,17,17,17,17,17,0,0,0,0,17,0,38,38,38,38,38,38,38,38,38,38,38,38,38,42,42,39,42,42,42,39,39,39,39,39,0,42,43,0,39,42,47,0,47,0,0,0,47,0,47,47,39,42,39,42,39,0,47,47,0,47,47,42,39,42,39,47,42,43,39,40,39,39,39,39,39,39,39,40,44,45,46,42,47,39,48,43,40,44,45,46,42,47,39,48,43,44,40,44,45,46,42,47,39,48,43,39,39,40,40,40,40,40,39,44,40,40,44,39,39,42,39,39,39,39,39,39,39,44,45,46,42,47,39,48,40,44,45,46,42,47,39,48,43,43,39,39,39,39,40,40,40,39,39,39,39,40,44,45,46,42,47,39,48,43,39,39,40,39,39,44,44,39,39,40,40,39,39,39,40,39,40,44,45,46,42,47,39,48,43,40,44,45,46,42,47,39,48,43,40,44,45,46,42,47,39,48,43,39,58,58,57,59,57,57,57,0,58,0,0,0,0,0,58,58,59,54,54,55,56,57,58,59,54,55,56,57,58,59,55,56,57,58,59,54,54,54,54,54,54,54,56,55,56,57,54,55,56,57,58,59,59,54,55,56,57,58,59,55,56,56,56,56,55,54,55,56,56,56,56,54,54,54,54,55,55,56,57,58,59,54,55,56,57,58,59,54,55,56,57,58,59,61,61,61,61,61,61,61,61,0,0,61,62,61,61,61,61,61,61,61,62,61,62,61,61,61,61,62,62,62,62,62,61,62,62,61,61,61,61,61,61,61,61,61,61,62,61,61,61,61,61,61,61,61,61,62,61,61,61,62,61,61,61,61,62,61,61,61,61,62,61,62,61,62,61,61,0,24,0,24,0,37,24,24,37,0,0,8,6,36,37,24,8,6,36,37,24,6,36,37,24,6,36,37,24,6,36,37,8,6,36,37,24,8,8,6,36,37,24,8,8,8,8,36,8,6,36,37,24,8,6,36,37,24,8,6,36,37,24,8],"f":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[[2,[1]]],1],[3,3],[4,4],[5,5],[[[2,[1]],[7,[6]],[7,[5]],8],[[9,[3]]]],[[[2,[1]],[7,[6]],[7,[5]],8,[11,[10]]],[[9,[3]]]],[[[2,[1]],6],[[7,[5]]]],[[[2,[1]],6,10,12,13,10],[[7,[5]]]],0,0,[[3,3],14],[[5,5],14],[[4,15]],[[5,15]],[[]],[[]],[[]],[[]],[[]],[[[2,[1]],[7,[6]],[7,[5]],16,10,10,13],[[9,[3]]]],[[[2,[1]],6,5,16],[[9,[3]]]],[[]],[[]],[[]],[[]],[[]],[[[2,[1]],14]],[1,[[2,[1]]]],[[[2,[1]],[11,[17]]],18],[[[2,[1]],5]],[[[2,[1]]]],[[[2,[1]],6,[7,[5]],10],[[9,[3]]]],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],19],[[],19],[[],19],[[],19],[[],19],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],0,[20,20],[21,21],[[6,10,12,13,10],[[7,[22]]]],[[]],[[20,20],14],[[21,21],14],[[20,15]],[[21,15]],[[]],[[]],[[]],[14],[[]],[[]],[[]],[14],[10],[[],[[7,[20]]]],[[[11,[10]]]],0,[23,[[11,[10]]]],[10],[[]],[[]],[[[7,[6]],10,24]],[[],14],[[]],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],19],[[],19],[[],19],[[13,14]],[[[11,[10]]]],[[]],[8],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,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[25,25],[26,26],[27,27],[28,28],[29,29],0,0,0,0,0,0,[26,12],[[30,15]],[[31,15]],[[25,15]],[[32,15]],[[33,15]],[[26,15]],[[27,15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,0,0,0,0,0,0,0,[26,10],0,0,[25,14],[25,14],0,[27,28],0,[27,24],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[27,29],0,0,[[[11,[10]]],[[35,[[11,[10]],34]]]],[[[11,[10]]],[[35,[[11,[10]],36]]]],[[[11,[10]]],[[35,[[11,[10]],31]]]],[[[11,[10]]],[[35,[[11,[10]],13]]]],[[[11,[10]]],[[35,[[11,[10]],30]]]],[[[11,[10]]],[[35,[[11,[10]],33]]]],[[[11,[10]]],[[35,[[11,[10]],32]]]],0,[[6,37]],[[6,5,[7,[[11,[10]]]]]],[[6,5,[11,[10]]]],[[6,5,[11,[10]]]],[6,[[7,[10]]]],[[6,10,2]],[[6,10,[11,[10]]]],[6],0,0,0,0,[6],0,[[38,6]],[[]],[[]],[[38,6],[[7,[10]]]],[[38,6,10],7],[[],38],[[38,6,10,[11,[10]]]],[[38,6]],[[]],[[]],[[],9],[[],9],[[],19],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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[],39],[[40,6,37]],[[39,39],39],[[39,39]],[[39,39],39],[[39,39]],[39,41],[[39,39],39],[[39,39]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],0,[[40,6,10,42,[2,[1]]],[[9,[43]]]],[44,44],[45,45],[46,46],[42,42],[47,47],[39,39],[48,48],[43,43],[[39,39],49],[39,39],[[40,6,5,[7,[[11,[10]]]]]],[[40,6,5,[11,[10]]]],[[40,6,5,[11,[10]]]],[[40,6],[[7,[10]]]],[[40,6,10,[2,[1]]]],[[39,39],14],0,[[40,6,10,[11,[10]]]],[[40,6]],0,[[39,39],39],[[],39],[[42,42],14],[[39,39],14],[[39,50]],[[39,51],52],[[39,51],52],[[39,51],52],[[39,51],52],[[39,51],52],[[44,15]],[[45,15]],[[46,15]],[[42,15]],[[47,15]],[[39,15]],[[48,15]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[3,43],[[]],[41,[[7,[39]]]],[41,39],[41,39],[50,39],[[40,6,[2,[1]]],[[9,[43]]]],[[40,6,[2,[1]]],[[9,[43]]]],[[40,6,10,[2,[1]]],[[9,[43]]]],[[39,53]],[[39,39]],[[39,39],39],[[39,39],14],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[39,14],[39,14],[[],40],[39,39],[[39,39],[[7,[49]]]],0,0,[[39,39]],[[39,39,14]],[[40,6,10,42,[2,[1]]],[[9,[43]]]],[[40,6]],[[39,39],39],[[39,39]],[[39,39],39],[40,[[7,[47]]]],[[39,39]],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],[[39,39],39],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,[[54,6,37]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[55,55],[56,56],[57,57],[58,58],[59,59],[[54,6,5,[7,[[11,[10]]]]]],[[54,6,5,[11,[10]]]],[[54,6,5,[11,[10]]]],[[54,6],[[7,[10]]]],[[54,6,10,[2,[1]]]],[[54,6,10,[11,[10]]]],[[54,6]],[[56,51],52],[[55,15]],[[56,15]],[[57,15]],[[]],[[]],[[]],[[]],[[]],[[]],[3,59],[[]],[[]],[[]],[[]],[[]],[[]],0,[56,14],[56,14],[56,14],[56,14],0,[[],54],[55,60],[56,14],[56,14],[56,14],[56,14],[[54,6,10,[2,[1]]],[[9,[59]]]],[[54,6,58,14,[2,[1]]],[[9,[59]]]],[54,[[7,[57]]]],[[],9],[[[11,[10]]],[[9,[55]]]],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],19],[[],19],[[],19],[[],19],[[],19],[[],19],0,0,0,0,0,0,0,0,0,0,[[],61],[[62,6,37]],[[61,61],61],[[61,61]],[[61,61],61],[[61,61]],[61,10],[[61,61],61],[[61,61]],[[]],[[]],[[]],[[]],[61,61],[[61,61],49],[61,61],[[62,6,5,[7,[[11,[10]]]]]],[[62,6,5,[11,[10]]]],[[62,6,5,[11,[10]]]],[[62,6],[[7,[10]]]],[[62,6,10,[2,[1]]]],[[61,61],14],[[62,6,10,[11,[10]]]],[[62,6]],[[61,61],61],[[],61],[[61,61],14],[[61,50]],[[61,51],52],[[61,51],52],[[61,51],52],[[61,51],52],[[61,51],52],[[61,15]],[[]],[[]],[10,[[7,[61]]]],[10,61],[10,61],[50,61],[[61,53]],[[61,61]],[[61,61],61],[[61,61],14],[[]],[[]],[61,14],[61,14],[61,62],[61,61],[[61,61],[[7,[49]]]],[[61,61]],[[61,61,14]],[[62,6]],[[61,61],61],[[61,61]],[[61,61],61],[[61,61]],[[],9],[[],9],[[],9],[[],9],[[],19],[[],19],[[61,61],61],0,0,0,0,0,0,0,0,0,0,0,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[6,6],[36,36],[37,37],[24,24],[[6,6],14],[[36,36],14],[[37,37],14],[[24,24],14],[[6,15]],[[36,15]],[[37,15]],[[]],[[]],[[]],[[]],[[]],0,[[]],[[]],[[]],[[]],[[]],0,[[12,63,16,10,13,13,13],8],0,0,[36,[[64,[10]]]],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],9],[[],19],[[],19],[[],19],[[],19],[[],19],0],"c":[],"p":[[8,"HostBus"],[3,"UsbHost"],[4,"ControlError"],[4,"Event"],[3,"PipeId"],[3,"DeviceAddress"],[4,"Option"],[3,"SetupPacket"],[4,"Result"],[15,"u8"],[15,"slice"],[4,"UsbDirection"],[15,"u16"],[15,"bool"],[3,"Formatter"],[4,"Recipient"],[8,"Driver"],[4,"PollResult"],[3,"TypeId"],[4,"Event"],[4,"Error"],[3,"InterruptPipe"],[15,"usize"],[4,"TransferType"],[3,"ConfigurationAttributes"],[3,"EndpointAddress"],[3,"EndpointAttributes"],[4,"SynchronizationType"],[4,"UsageType"],[3,"DeviceDescriptor"],[3,"ConfigurationDescriptor"],[3,"InterfaceDescriptor"],[3,"EndpointDescriptor"],[3,"Descriptor"],[6,"IResult"],[3,"Bcd16"],[4,"ConnectionSpeed"],[3,"SimpleDetector"],[3,"PortStatus"],[3,"HubDriver"],[15,"u32"],[4,"PortFeature"],[4,"HubError"],[3,"HubDescriptor"],[3,"Characteristics"],[3,"DeviceRemovable"],[4,"HubEvent"],[3,"HubStatus"],[4,"Ordering"],[8,"IntoIterator"],[3,"Formatter"],[6,"Result"],[8,"Hasher"],[3,"KbdDriver"],[3,"InputReport"],[3,"ModifierStatus"],[4,"KbdEvent"],[4,"KbdLed"],[4,"KbdError"],[8,"Iterator"],[3,"EventMask"],[3,"LogDriver"],[4,"RequestType"],[15,"array"]]}\ }'); if (typeof window !== 'undefined' && window.initSearch) {window.initSearch(searchIndex)}; if (typeof exports !== 'undefined') {exports.searchIndex = searchIndex}; diff --git a/doc/settings.html b/doc/settings.html index 1613dec..99514c1 100644 --- a/doc/settings.html +++ b/doc/settings.html @@ -1 +1 @@ -Rustdoc settings

Rustdoc settings

Back
\ No newline at end of file +Rustdoc settings

Rustdoc settings

Back
\ No newline at end of file diff --git a/doc/source-files.js b/doc/src-files.js similarity index 77% rename from doc/source-files.js rename to doc/src-files.js index 2f8c2e4..d20d28f 100644 --- a/doc/source-files.js +++ b/doc/src-files.js @@ -1,4 +1,4 @@ -var sourcesIndex = JSON.parse('{\ +var srcIndex = JSON.parse('{\ "usbh":["",[["driver",[],["detector.rs","hub.rs","kbd.rs","log.rs"]]],["bus.rs","descriptor.rs","discovery.rs","driver.rs","enumeration.rs","enumerator.rs","lib.rs","transfer.rs","types.rs"]]\ }'); -createSourceSidebar(); +createSrcSidebar(); diff --git a/doc/src/usbh/bus.rs.html b/doc/src/usbh/bus.rs.html index a9feaf9..9e52e3a 100644 --- a/doc/src/usbh/bus.rs.html +++ b/doc/src/usbh/bus.rs.html @@ -1,4 +1,4 @@ -bus.rs - source
1
+bus.rs - source
1
 2
 3
 4
@@ -409,7 +409,7 @@
     ///
     /// For an `In` pipe this is called after the driver(s) have consumed the data.
     /// For an `Out` pipe this is called after new data has been placed in the buffer .
-    fn pipe_continue(&self, pipe_ref: u8);
+    fn pipe_continue(&mut self, pipe_ref: u8);
 
     /// Enable/disable interrupt on SOF
     ///
diff --git a/doc/src/usbh/descriptor.rs.html b/doc/src/usbh/descriptor.rs.html
index bad04d6..b243984 100644
--- a/doc/src/usbh/descriptor.rs.html
+++ b/doc/src/usbh/descriptor.rs.html
@@ -1,4 +1,4 @@
-descriptor.rs - source
1
+descriptor.rs - source
1
 2
 3
 4
diff --git a/doc/src/usbh/discovery.rs.html b/doc/src/usbh/discovery.rs.html
index a7f1c46..6e3e2a6 100644
--- a/doc/src/usbh/discovery.rs.html
+++ b/doc/src/usbh/discovery.rs.html
@@ -1,4 +1,4 @@
-discovery.rs - source
1
+discovery.rs - source
1
 2
 3
 4
diff --git a/doc/src/usbh/driver.rs.html b/doc/src/usbh/driver.rs.html
index d89006b..149d411 100644
--- a/doc/src/usbh/driver.rs.html
+++ b/doc/src/usbh/driver.rs.html
@@ -1,4 +1,4 @@
-driver.rs - source
1
+driver.rs - source
1
 2
 3
 4
diff --git a/doc/src/usbh/driver/detector.rs.html b/doc/src/usbh/driver/detector.rs.html
index d857315..466050f 100644
--- a/doc/src/usbh/driver/detector.rs.html
+++ b/doc/src/usbh/driver/detector.rs.html
@@ -1,4 +1,4 @@
-detector.rs - source
1
+detector.rs - source
1
 2
 3
 4
diff --git a/doc/src/usbh/driver/hub.rs.html b/doc/src/usbh/driver/hub.rs.html
index 71a817a..839545b 100644
--- a/doc/src/usbh/driver/hub.rs.html
+++ b/doc/src/usbh/driver/hub.rs.html
@@ -1,4 +1,4 @@
-hub.rs - source
1
+hub.rs - source
1
 2
 3
 4
diff --git a/doc/src/usbh/driver/kbd.rs.html b/doc/src/usbh/driver/kbd.rs.html
index 327b2b2..22e9a02 100644
--- a/doc/src/usbh/driver/kbd.rs.html
+++ b/doc/src/usbh/driver/kbd.rs.html
@@ -1,4 +1,4 @@
-kbd.rs - source
1
+kbd.rs - source
1
 2
 3
 4
diff --git a/doc/src/usbh/driver/log.rs.html b/doc/src/usbh/driver/log.rs.html
index 763e68c..48943f1 100644
--- a/doc/src/usbh/driver/log.rs.html
+++ b/doc/src/usbh/driver/log.rs.html
@@ -1,4 +1,4 @@
-log.rs - source
1
+log.rs - source
1
 2
 3
 4
diff --git a/doc/src/usbh/enumeration.rs.html b/doc/src/usbh/enumeration.rs.html
index 27de99a..c74ab98 100644
--- a/doc/src/usbh/enumeration.rs.html
+++ b/doc/src/usbh/enumeration.rs.html
@@ -1,4 +1,4 @@
-enumeration.rs - source
1
+enumeration.rs - source
1
 2
 3
 4
diff --git a/doc/src/usbh/enumerator.rs.html b/doc/src/usbh/enumerator.rs.html
index 355e123..0007d4a 100644
--- a/doc/src/usbh/enumerator.rs.html
+++ b/doc/src/usbh/enumerator.rs.html
@@ -1,4 +1,4 @@
-enumerator.rs - source
1
+enumerator.rs - source
1
 2
 3
 4
diff --git a/doc/src/usbh/lib.rs.html b/doc/src/usbh/lib.rs.html
index d38fe87..90806f8 100644
--- a/doc/src/usbh/lib.rs.html
+++ b/doc/src/usbh/lib.rs.html
@@ -1,4 +1,4 @@
-lib.rs - source
1
+lib.rs - source
1
 2
 3
 4
diff --git a/doc/src/usbh/transfer.rs.html b/doc/src/usbh/transfer.rs.html
index 76feb20..2fbb2fc 100644
--- a/doc/src/usbh/transfer.rs.html
+++ b/doc/src/usbh/transfer.rs.html
@@ -1,4 +1,4 @@
-transfer.rs - source
1
+transfer.rs - source
1
 2
 3
 4
diff --git a/doc/src/usbh/types.rs.html b/doc/src/usbh/types.rs.html
index 1d573e7..1937999 100644
--- a/doc/src/usbh/types.rs.html
+++ b/doc/src/usbh/types.rs.html
@@ -1,4 +1,4 @@
-types.rs - source
1
+types.rs - source
1
 2
 3
 4
diff --git a/doc/static.files/ayu-614652228113ac93.css b/doc/static.files/ayu-fd19013d6ce078bf.css
similarity index 63%
rename from doc/static.files/ayu-614652228113ac93.css
rename to doc/static.files/ayu-fd19013d6ce078bf.css
index 8fd09c9..ba3aa60 100644
--- a/doc/static.files/ayu-614652228113ac93.css
+++ b/doc/static.files/ayu-fd19013d6ce078bf.css
@@ -1 +1 @@
- :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
+ :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;--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: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,#src-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.src .example-wrap{color:#e6e1cf;}.sidebar .current,.sidebar a:hover,#src-sidebar div.files>a:hover,details.dir-entry summary:hover,#src-sidebar div.files>a:focus,details.dir-entry summary:focus,#src-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/doc/static.files/dark-1097f8e92a01e3cf.css b/doc/static.files/dark-0a43001d3fc2282c.css
similarity index 68%
rename from doc/static.files/dark-1097f8e92a01e3cf.css
rename to doc/static.files/dark-0a43001d3fc2282c.css
index 1e5e7d1..81032b2 100644
--- a/doc/static.files/dark-1097f8e92a01e3cf.css
+++ b/doc/static.files/dark-0a43001d3fc2282c.css
@@ -1 +1 @@
-: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
+: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:rgb(78,139,202);--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: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/doc/static.files/light-0f8c037637f9eb3e.css b/doc/static.files/light-1596385f77d47ef2.css
similarity index 68%
rename from doc/static.files/light-0f8c037637f9eb3e.css
rename to doc/static.files/light-1596385f77d47ef2.css
index 21c3a85..50adde5 100644
--- a/doc/static.files/light-0f8c037637f9eb3e.css
+++ b/doc/static.files/light-1596385f77d47ef2.css
@@ -1 +1 @@
-: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
+: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: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);}
\ No newline at end of file
diff --git a/doc/static.files/main-0795b7d26be81095.js b/doc/static.files/main-0795b7d26be81095.js
new file mode 100644
index 0000000..87b4338
--- /dev/null
+++ b/doc/static.files/main-0795b7d26be81095.js
@@ -0,0 +1,12 @@
+"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/doc/static.files/main-f0540c1d82cde29b.js b/doc/static.files/main-f0540c1d82cde29b.js deleted file mode 100644 index 2fa2902..0000000 --- a/doc/static.files/main-f0540c1d82cde29b.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict";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},hideResults:()=>{switchDisplayedElement(null);document.title=searchState.titleBeforeSearch;if(browserSupportsHistoryApi()){history.replaceState(null,"",getNakedUrl()+window.location.hash)}},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){return}window.hideAllModals(false);const wrapper=document.createElement("div");if(notable_ty){wrapper.innerHTML="
"+window.NOTABLE_TRAITS[notable_ty]+"
"}else if(e.getAttribute("title")!==undefined){const titleContent=document.createElement("div");titleContent.className="content";titleContent.appendChild(document.createTextNode(e.getAttribute("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;wrapper.onpointerleave=function(ev){if(ev.pointerType!=="mouse"){return}if(!e.TOOLTIP_FORCE_VISIBLE&&!elemIsInParent(event.relatedTarget,e)){hideTooltip(true)}}}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);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}showTooltip(this)};e.onpointerleave=function(ev){if(ev.pointerType!=="mouse"){return}if(!this.TOOLTIP_FORCE_VISIBLE&&!elemIsInParent(ev.relatedTarget,window.CURRENT_TOOLTIP_ELEMENT)){hideTooltip(true)}}});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");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=["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 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/doc/static.files/noscript-13285aec31fa243e.css b/doc/static.files/noscript-13285aec31fa243e.css deleted file mode 100644 index c32e0cb..0000000 --- a/doc/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/doc/static.files/noscript-cffde32267a19fd6.css b/doc/static.files/noscript-cffde32267a19fd6.css new file mode 100644 index 0000000..12d3f6d --- /dev/null +++ b/doc/static.files/noscript-cffde32267a19fd6.css @@ -0,0 +1 @@ + #main-content .attributes{margin-left:0 !important;}#copy-path{display:none;}nav.sub{display:none;}.src .sidebar{display:none;}.notable-traits{display:none;} \ No newline at end of file diff --git a/doc/static.files/rustdoc-cb6f1f67f1bcd037.css b/doc/static.files/rustdoc-cb6f1f67f1bcd037.css new file mode 100644 index 0000000..ac78724 --- /dev/null +++ b/doc/static.files/rustdoc-cb6f1f67f1bcd037.css @@ -0,0 +1,8 @@ + :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.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,.small-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{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;}.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%;}.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.src .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,#src-sidebar{background-color:var(--sidebar-background-color);}#src-sidebar-toggle>button:hover,#src-sidebar-toggle>button:focus{background-color:var(--sidebar-background-color-hover);}.src .sidebar>*:not(#src-sidebar-toggle){visibility:hidden;}.src-sidebar-expanded .src .sidebar{overflow-y:auto;flex-basis:300px;}.src-sidebar-expanded .src .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(.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);}.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;}.src 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);}#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: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.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;}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;}#src-sidebar{width:100%;overflow:auto;}#src-sidebar>.title{font-size:1.5rem;text-align:center;border-bottom:1px solid var(--border-color);margin-bottom:6px;}#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-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;}.src main,.rustdoc.src .sidebar{top:0;padding:0;height:100vh;border: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;}.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;}.src-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;}.src-sidebar-expanded .src .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;}.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;}.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/doc/static.files/rustdoc-f3501f0f5ae15dfb.css b/doc/static.files/rustdoc-f3501f0f5ae15dfb.css deleted file mode 100644 index 3681b04..0000000 --- a/doc/static.files/rustdoc-f3501f0f5ae15dfb.css +++ /dev/null @@ -1,8 +0,0 @@ - :root{--nav-sub-mobile-padding:8px;}@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 .primitive>i,.result-name .keyword>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{flex:1;}.search-results>a>div.desc{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;}.search-results a:hover,.search-results a:focus{background-color:var(--search-result-link-focus-background-color);}.search-results .result-name span.alias{color:var(--search-results-alias-color);}.search-results .result-name span.grey{color:var(--search-results-grey-color);}.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;}.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;align-items:center;white-space:pre-wrap;border-radius:3px;display:inline-flex;vertical-align:text-bottom;}.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;}a.tooltip:hover::after{position:absolute;top:calc(100% - 10px);left:-15px;right:-15px;height:20px;content:"\00a0";}.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;}.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/doc/static.files/search-4926e5fc22a5646a.js b/doc/static.files/search-4926e5fc22a5646a.js deleted file mode 100644 index df07788..0000000 --- a/doc/static.files/search-4926e5fc22a5646a.js +++ /dev/null @@ -1 +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 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();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 isWhitespace(c)||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===","||isWhitespaceCharacter(c)}function isWhitespaceCharacter(c){return c===" "||c==="\t"}function createQueryElement(query,parserState,name,generics,isInGenerics){if(name==="*"||(name.length===0&&generics.length===0)){return}if(query.literalSearch&&parserState.totalElems-parserState.genericsElems>0){throw["You cannot have more than one element if you use quotes"]}const pathSegments=name.split("::");if(pathSegments.length>1){for(let i=0,len=pathSegments.length;i=end){throw["Found generics without a path"]}parserState.pos+=1;getItemsBefore(query,parserState,generics,">")}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;while(parserState.pos"){extra="<"}else if(endChar===""){extra="->"}else{extra=endChar}throw["Unexpected ",c," after ",extra]}if(!foundStopChar){if(endChar!==""){throw["Expected ",",",", "," "," or ",endChar,", found ",c,]}throw["Expected ",","," or "," ",", found ",c,]}const posBefore=parserState.pos;start=parserState.pos;getNextElem(query,parserState,elems,endChar===">");if(endChar!==""&&parserState.pos>=parserState.length){throw["Unclosed ","<"]}if(posBefore===parserState.pos){parserState.pos+=1}foundStopChar=false}if(parserState.pos>=parserState.length&&endChar!==""){throw["Unclosed ","<"]}parserState.pos+=1;parserState.typeFilter=oldTypeFilter}function checkExtraTypeFilterCharacters(start,parserState){const query=parserState.userQuery;for(let pos=start;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 ",":"]}if(query.elems.length===0){throw["Expected type filter before ",":"]}else if(query.literalSearch){throw["You 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}if(!foundStopChar){if(parserState.typeFilter!==null){throw["Expected ",",",", "," "," or ","->",", found ",c,]}throw["Expected ",",",", "," ",", ",":"," or ","->",", 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)"]}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(row,elem){if(row.generics.length===0||elem.generics.length===0){return false}if(elem.generics.length>0&&row.generics.length>=elem.generics.length){const elems=new Map();const addEntryToElems=function addEntryToElems(entry){if(entry.id===-1){for(const inner_entry of entry.generics){addEntryToElems(inner_entry)}return}let currentEntryElems;if(elems.has(entry.id)){currentEntryElems=elems.get(entry.id)}else{currentEntryElems=[];elems.set(entry.id,currentEntryElems)}currentEntryElems.push(entry)};for(const entry of row.generics){addEntryToElems(entry)}const handleGeneric=generic=>{if(!elems.has(generic.id)){return false}const matchElems=elems.get(generic.id);const matchIdx=matchElems.findIndex(tmp_elem=>{if(generic.generics.length>0&&!checkGenerics(tmp_elem,generic)){return false}return typePassesFilter(generic.typeFilter,tmp_elem.ty)});if(matchIdx===-1){return false}matchElems.splice(matchIdx,1);if(matchElems.length===0){elems.delete(generic.id)}return true};for(const generic of elem.generics){if(generic.typeFilter!==-1&&!handleGeneric(generic)){return false}}for(const generic of elem.generics){if(generic.typeFilter===-1&&!handleGeneric(generic)){return false}}return true}return false}function checkIfInGenerics(row,elem){for(const entry of row.generics){if(checkType(entry,elem)){return true}}return false}function checkType(row,elem){if(row.id===-1){return row.generics.length>0?checkIfInGenerics(row,elem):false}if(row.id===elem.id&&typePassesFilter(elem.typeFilter,row.ty)){if(elem.generics.length>0){return checkGenerics(row,elem)}return true}return checkIfInGenerics(row,elem)}function findArg(row,elem,skipPositions){if(row&&row.type&&row.type.inputs&&row.type.inputs.length>0){let i=0;for(const input of row.type.inputs){if(skipPositions.indexOf(i)!==-1){i+=1;continue}if(checkType(input,elem)){return i}i+=1}}return-1}function checkReturned(row,elem,skipPositions){if(row&&row.type&&row.type.output.length>0){let i=0;for(const ret_ty of row.type.output){if(skipPositions.indexOf(i)!==-1){i+=1;continue}if(checkType(ret_ty,elem)){return i}i+=1}}return-1}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=findArg(row,elem,[]);if(in_args!==-1){addIntoResults(results_in_args,fullId,pos,-1,0,0,maxEditDistance)}const returned=checkReturned(row,elem,[]);if(returned!==-1){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)){return}function checkArgs(elems,callback){const skipPositions=[];for(const elem of elems){const position=callback(row,elem,skipPositions);if(position!==-1){skipPositions.push(position)}else{return false}}return true}if(!checkArgs(parsedQuery.elems,findArg)){return}if(!checkArgs(parsedQuery.returned,checkReturned)){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];length+=1;let extra="";if(type==="primitive"){extra=" (primitive type)"}else if(type==="keyword"){extra=" (keyword)"}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",item.displayPath+""+name+extra+"");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")){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}`}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 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";if(browserSupportsHistoryApi()){const newURL=buildUrl(query.original,filterCrates);if(!history.state&&!params.search){history.pushState(null,"",newURL)}else{history.replaceState(null,"",newURL)}}showResults(execQuery(query,searchWords,filterCrates,window.currentCrate),params.go_to_first,filterCrates)}function buildTypeMapIndex(typeNameIdMap,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 buildItemSearchTypeAll(types,lowercasePaths,typeNameIdMap){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,typeNameIdMap)}return{id:pathIndex===0?-1:buildTypeMapIndex(typeNameIdMap,lowercasePaths[pathIndex-1].name),ty:pathIndex===0?null:lowercasePaths[pathIndex-1].ty,generics:generics,}})}function buildFunctionSearchType(functionSearchType,lowercasePaths,typeNameIdMap){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(typeNameIdMap,lowercasePaths[pathIndex-1].name),ty:pathIndex===0?null:lowercasePaths[pathIndex-1].ty,generics:[],}]}else{inputs=buildItemSearchTypeAll(functionSearchType[INPUTS_DATA],lowercasePaths,typeNameIdMap)}if(functionSearchType.length>1){if(typeof functionSearchType[OUTPUT_DATA]==="number"){const pathIndex=functionSearchType[OUTPUT_DATA];output=[{id:pathIndex===0?-1:buildTypeMapIndex(typeNameIdMap,lowercasePaths[pathIndex-1].name),ty:pathIndex===0?null:lowercasePaths[pathIndex-1].ty,generics:[],}]}else{output=buildItemSearchTypeAll(functionSearchType[OUTPUT_DATA],lowercasePaths,typeNameIdMap)}}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;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,typeNameIdMap),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 params=searchState.getQueryStringParams();const query=searchState.input.value.trim();if(!history.state&&!params.search){history.pushState(null,"",buildUrl(query,null))}else{history.replaceState(null,"",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/doc/static.files/search-6dfdfced5eff6596.js b/doc/static.files/search-6dfdfced5eff6596.js new file mode 100644 index 0000000..90d0eb7 --- /dev/null +++ b/doc/static.files/search-6dfdfced5eff6596.js @@ -0,0 +1,5 @@ +"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";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,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/doc/static.files/source-script-11255107d0a65077.js b/doc/static.files/source-script-11255107d0a65077.js deleted file mode 100644 index 6afbb5a..0000000 --- a/doc/static.files/source-script-11255107d0a65077.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(function(){const rootPath=document.getElementById("rustdoc-vars").attributes["data-root-path"].value;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/doc/static.files/src-script-3280b574d94e47b4.js b/doc/static.files/src-script-3280b574d94e47b4.js new file mode 100644 index 0000000..9ea8892 --- /dev/null +++ b/doc/static.files/src-script-3280b574d94e47b4.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"){addClass(document.documentElement,"src-sidebar-expanded");child.innerText="<";updateLocalStorage("source-sidebar-show","true")}else{removeClass(document.documentElement,"src-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 createSrcSidebar(){const container=document.querySelector("nav.sidebar");const sidebarToggle=createSidebarToggle();container.insertBefore(sidebarToggle,container.firstChild);const sidebar=document.createElement("div");sidebar.id="src-sidebar";let hasFoundFile=false;const title=document.createElement("div");title.className="title";title.innerText="Files";sidebar.appendChild(title);Object.keys(srcIndex).forEach(key=>{srcIndex[key][NAME_OFFSET]=key;hasFoundFile=createDirEntry(srcIndex[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 highlightSrcLines(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 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",()=>{const match=window.location.hash.match(lineNumbersRegex);if(match){return highlightSrcLines(match)}});onEachLazy(document.getElementsByClassName("src-line-numbers"),el=>{el.addEventListener("click",handleSrcHighlight)});highlightSrcLines();window.createSrcSidebar=createSrcSidebar})() \ No newline at end of file diff --git a/doc/static.files/storage-62ce34ea385b278a.js b/doc/static.files/storage-62ce34ea385b278a.js deleted file mode 100644 index 6f4ec2e..0000000 --- a/doc/static.files/storage-62ce34ea385b278a.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.getElementById("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/doc/static.files/storage-db41da1a38ea3cb8.js b/doc/static.files/storage-db41da1a38ea3cb8.js new file mode 100644 index 0000000..b872813 --- /dev/null +++ b/doc/static.files/storage-db41da1a38ea3cb8.js @@ -0,0 +1 @@ +"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,"src-sidebar-expanded")}window.addEventListener("pageshow",ev=>{if(ev.persisted){setTimeout(updateTheme,0)}}) \ No newline at end of file diff --git a/doc/usbh/all.html b/doc/usbh/all.html index 9b7cd9b..e4c2776 100644 --- a/doc/usbh/all.html +++ b/doc/usbh/all.html @@ -1 +1 @@ -List of all items in this crate
\ No newline at end of file +List of all items in this crate
\ No newline at end of file diff --git a/doc/usbh/bus/enum.Error.html b/doc/usbh/bus/enum.Error.html index b620d5b..6ebecde 100644 --- a/doc/usbh/bus/enum.Error.html +++ b/doc/usbh/bus/enum.Error.html @@ -1,4 +1,4 @@ -Error in usbh::bus - Rust

Enum usbh::bus::Error

source ·
pub enum Error {
+Error in usbh::bus - Rust

Enum usbh::bus::Error

source ·
pub enum Error {
     Crc,
     BitStuffing,
     RxOverflow,
@@ -11,16 +11,16 @@
 
§

RxTimeout

Expected data to be received, but it did not arrive in time

§

DataSequence

Data sequence error. Saw DATA0 when expecting DATA1 or vice versa.

§

Other

None of the above. Hardware specific error condition.

-

Trait Implementations§

source§

impl Clone for Error

source§

fn clone(&self) -> Error

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 Format for Error

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl PartialEq<Error> for Error

source§

fn eq(&self, other: &Error) -> 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 Error

source§

impl StructuralPartialEq for Error

Auto Trait Implementations§

§

impl RefUnwindSafe for Error

§

impl Send for Error

§

impl Sync for Error

§

impl Unpin for Error

§

impl UnwindSafe for Error

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).

+

Trait Implementations§

source§

impl Clone for Error

source§

fn clone(&self) -> Error

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 Format for Error

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl PartialEq<Error> for Error

source§

fn eq(&self, other: &Error) -> 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 Error

source§

impl StructuralPartialEq for Error

Auto Trait Implementations§

§

impl RefUnwindSafe for Error

§

impl Send for Error

§

impl Sync for Error

§

impl Unpin for Error

§

impl UnwindSafe for Error

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).

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 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 diff --git a/doc/usbh/bus/enum.Event.html b/doc/usbh/bus/enum.Event.html index 76592cd..810a321 100644 --- a/doc/usbh/bus/enum.Event.html +++ b/doc/usbh/bus/enum.Event.html @@ -1,11 +1,11 @@ -Event in usbh::bus - Rust

Enum usbh::bus::Event

source ·
pub enum Event {
+Event in usbh::bus - Rust

Enum usbh::bus::Event

source ·
pub enum Event {
     Attached(ConnectionSpeed),
     Detached,
     TransComplete,
     Stall,
     Resume,
     Error(Error),
-    InterruptPipe(u8),
+    InterruptPipe(u8),
     Sof,
 }

Variants§

§

Attached(ConnectionSpeed)

A new device was attached, with given speed

§

Detached

The device is no longer attached

@@ -13,20 +13,20 @@
§

Stall

Device sent a STALL. This usually means that the device does not understand our communication

§

Resume

Device has resumed from sleep?

§

Error(Error)

An error has occured (details in the Error)

-
§

InterruptPipe(u8)

Data from interrupt pipe is available to be read or written

+
§

InterruptPipe(u8)

Data from interrupt pipe is available to be read or written

§

Sof

A start-of-frame packet has been sent

This event must only be generated while start-of-frame interrupts are enabled.

See HostBus::interrupt_on_sof for details.

-

Trait Implementations§

source§

impl Clone for Event

source§

fn clone(&self) -> Event

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 Format for Event

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl PartialEq<Event> for Event

source§

fn eq(&self, other: &Event) -> 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 Event

source§

impl StructuralPartialEq for Event

Auto Trait Implementations§

§

impl RefUnwindSafe for Event

§

impl Send for Event

§

impl Sync for Event

§

impl Unpin for Event

§

impl UnwindSafe for Event

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).

+

Trait Implementations§

source§

impl Clone for Event

source§

fn clone(&self) -> Event

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 Format for Event

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl PartialEq<Event> for Event

source§

fn eq(&self, other: &Event) -> 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 Event

source§

impl StructuralPartialEq for Event

Auto Trait Implementations§

§

impl RefUnwindSafe for Event

§

impl Send for Event

§

impl Sync for Event

§

impl Unpin for Event

§

impl UnwindSafe for Event

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).

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 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 diff --git a/doc/usbh/bus/index.html b/doc/usbh/bus/index.html index 13def86..f427543 100644 --- a/doc/usbh/bus/index.html +++ b/doc/usbh/bus/index.html @@ -1,4 +1,4 @@ -usbh::bus - Rust

Module usbh::bus

source ·
Expand description

Interface for host bus hardware

+usbh::bus - Rust

Module usbh::bus

source ·
Expand description

Interface for host bus hardware

In order to use usbh on a given device, there must be a HostBus implementation specific to that device.

This interface is still evolving, as there is only one (partially complete) implementation so far.

Structs

Enums

Traits

  • Interface for host bus hardware
\ No newline at end of file diff --git a/doc/usbh/bus/struct.InterruptPipe.html b/doc/usbh/bus/struct.InterruptPipe.html index 874a02d..b106e72 100644 --- a/doc/usbh/bus/struct.InterruptPipe.html +++ b/doc/usbh/bus/struct.InterruptPipe.html @@ -1,24 +1,24 @@ -InterruptPipe in usbh::bus - Rust

Struct usbh::bus::InterruptPipe

source ·
pub struct InterruptPipe {
-    pub ptr: *mut u8,
-    pub bus_ref: u8,
+InterruptPipe in usbh::bus - Rust

Struct usbh::bus::InterruptPipe

source ·
pub struct InterruptPipe {
+    pub ptr: *mut u8,
+    pub bus_ref: u8,
 }
Expand description

Result from create_interrupt_pipe

-

Fields§

§ptr: *mut u8

Pointer to the buffer for this pipe

+

Fields§

§ptr: *mut u8

Pointer to the buffer for this pipe

See documentation for create_interrupt_pipe for details on how this is used.

-
§bus_ref: u8

Reference for this pipe generated by the host bus

+
§bus_ref: u8

Reference for this pipe generated by the host bus

This reference is used in three places:

-

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).

+

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).

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 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 diff --git a/doc/usbh/bus/trait.HostBus.html b/doc/usbh/bus/trait.HostBus.html index afe65b9..46a9439 100644 --- a/doc/usbh/bus/trait.HostBus.html +++ b/doc/usbh/bus/trait.HostBus.html @@ -1,94 +1,94 @@ -HostBus in usbh::bus - Rust

Trait usbh::bus::HostBus

source ·
pub trait HostBus {
+HostBus in usbh::bus - Rust

Trait usbh::bus::HostBus

source ·
pub trait HostBus {
 
Show 18 methods // Required methods fn reset_controller(&mut self); fn reset_bus(&mut self); fn enable_sof(&mut self); - fn sof_enabled(&self) -> bool; + fn sof_enabled(&self) -> bool; fn set_recipient( &mut self, - dev_addr: Option<DeviceAddress>, - endpoint: u8, + dev_addr: Option<DeviceAddress>, + endpoint: u8, transfer_type: TransferType ); - fn ls_preamble(&mut self, enabled: bool); + fn ls_preamble(&mut self, enabled: bool); fn stop_transaction(&mut self); fn write_setup(&mut self, setup: SetupPacket); - fn write_data_in(&mut self, length: u16, pid: bool); - fn prepare_data_out(&mut self, data: &[u8]); + fn write_data_in(&mut self, length: u16, pid: bool); + fn prepare_data_out(&mut self, data: &[u8]); fn write_data_out_prepared(&mut self); - fn poll(&mut self) -> Option<Event>; - fn received_data(&self, length: usize) -> &[u8]; + fn poll(&mut self) -> Option<Event>; + fn received_data(&self, length: usize) -> &[u8]; fn create_interrupt_pipe( &mut self, device_address: DeviceAddress, - endpoint_number: u8, + endpoint_number: u8, direction: UsbDirection, - size: u16, - interval: u8 - ) -> Option<InterruptPipe>; - fn release_interrupt_pipe(&mut self, pipe_ref: u8); - fn pipe_continue(&self, pipe_ref: u8); - fn interrupt_on_sof(&mut self, enable: bool); + size: u16, + interval: u8 + ) -> Option<InterruptPipe>; + fn release_interrupt_pipe(&mut self, pipe_ref: u8); + fn pipe_continue(&mut self, pipe_ref: u8); + fn interrupt_on_sof(&mut self, enable: bool); // Provided method - fn write_data_out(&mut self, data: &[u8]) { ... } + fn write_data_out(&mut self, data: &[u8]) { ... }
}
Expand description

Interface for host bus hardware

-

Required Methods§

source

fn reset_controller(&mut self)

Reset the controller into it’s initial state.

+

Required Methods§

source

fn reset_controller(&mut self)

Reset the controller into it’s initial state.

This is called once as the UsbHost is initialized, and will be called again when crate::UsbHost::reset is called.

It must do any necessary preparation needed to enable the hardware and put it into the appropriate mode to act as a host.

It must also reset any internal state related to this HostBus interface to a default configuration.

If applicable, this is also the point where all interrupts should be enabled that are necessary to generate the appropriate Events when poll is called.

This method must not enable interrupts on start-of-frame. SOF-interrupts are separately controlled by HostBus::interrupt_on_sof.

-
source

fn reset_bus(&mut self)

Reset the bus, but keep the controller initialized.

+
source

fn reset_bus(&mut self)

Reset the bus, but keep the controller initialized.

Must cause a RESET condition on the bus.

Must not disable any interrupts previously set up, but may suspend generating SOF / keep-alive packets, requiring the host to call HostBus::enable_sof after the reset is complete.

-
source

fn enable_sof(&mut self)

Enable sending SOF (for full-speed) or keep-alive (for low-speed) packets

+
source

fn enable_sof(&mut self)

Enable sending SOF (for full-speed) or keep-alive (for low-speed) packets

This prevents the attached device from entering suspend mode.

-
source

fn sof_enabled(&self) -> bool

Check if SOF packets are currently enabled

-
source

fn set_recipient( +

source

fn sof_enabled(&self) -> bool

Check if SOF packets are currently enabled

+
source

fn set_recipient( &mut self, - dev_addr: Option<DeviceAddress>, - endpoint: u8, + dev_addr: Option<DeviceAddress>, + endpoint: u8, transfer_type: TransferType )

Set device address, endpoint and transfer type for an upcoming transfer

A dev_addr of 0 is represented as None.

This method is always called before a transfer is initiated. It must have effect for all future transactions (SETUP, DATA, …), until set_recipient is called again.

-
source

fn ls_preamble(&mut self, enabled: bool)

source

fn stop_transaction(&mut self)

Stop current transaction, if there is one in progress

+
source

fn ls_preamble(&mut self, enabled: bool)

source

fn stop_transaction(&mut self)

Stop current transaction, if there is one in progress

This will be called if a RxTimeout is encountered, to prevent the transaction from being retried indefinitely.

-
source

fn write_setup(&mut self, setup: SetupPacket)

Write a SETUP packet to the bus

+
source

fn write_setup(&mut self, setup: SetupPacket)

Write a SETUP packet to the bus

Once the packet has been acknowledged by the device, a Event::TransComplete must be generated.

This method must not modify the buffers used for DATA transfers. In particular if HostBus::prepare_data_out is called before HostBus::write_setup, as soon as Event::TransComplete occurs, the data buffer must be in the prepared state, and ready for a HostBus::write_data_out_prepared call.

-
source

fn write_data_in(&mut self, length: u16, pid: bool)

Write a DATA IN packet to the bus, then receive length bytes

+
source

fn write_data_in(&mut self, length: u16, pid: bool)

Write a DATA IN packet to the bus, then receive length bytes

Once all data has been received, a Event::TransComplete must be generated.

Afterwards the received data must be accessible via received_data.

-
source

fn prepare_data_out(&mut self, data: &[u8])

Load the given data into the output buffer

+
source

fn prepare_data_out(&mut self, data: &[u8])

Load the given data into the output buffer

After this method was called, a HostBus::write_data_out_prepared call should write this data.

The prepared data may be overwritten by any future call to HostBus::prepare_data_out, HostBus::write_data_in or HostBus::write_data_out.

In other words: the data buffer can be shared by IN and OUT transfers, since there will only ever be one of them in progress at any time.

-
source

fn write_data_out_prepared(&mut self)

Write a DATA OUT packet to the bus, assuming the buffers were already prepared

+
source

fn write_data_out_prepared(&mut self)

Write a DATA OUT packet to the bus, assuming the buffers were already prepared

The data sent will have been passed to HostBus::prepare_data_out before this call.

Once all data has been sent, a Event::TransComplete must be generated.

-
source

fn poll(&mut self) -> Option<Event>

Check if there is an event pending on the bus, if there is return it.

+
source

fn poll(&mut self) -> Option<Event>

Check if there is an event pending on the bus, if there is return it.

This will be called whenever application code calls crate::UsbHost::poll.

-
source

fn received_data(&self, length: usize) -> &[u8]

Access the input buffer for a recent transfer

+
source

fn received_data(&self, length: usize) -> &[u8]

Access the input buffer for a recent transfer

This method will be called after the host bus completed a DATA IN transfer, as signaled by Event::TransComplete.

The given length will be equal to the length passed to the most recent write_data_in call.

The returned buffer should be exactly length bytes long. It may also be smaller though, if length exceeds the maximum buffer size that the host bus supports.

-
source

fn create_interrupt_pipe( +

source

fn create_interrupt_pipe( &mut self, device_address: DeviceAddress, - endpoint_number: u8, + endpoint_number: u8, direction: UsbDirection, - size: u16, - interval: u8 -) -> Option<InterruptPipe>

Create an interrupt pipe

+ size: u16, + interval: u8 +) -> Option<InterruptPipe>

Create an interrupt pipe

Interrupt pipes are managed by the host bus.

The lifecycle of an interrupt pipe is as follows:

    @@ -124,18 +124,18 @@
    Buffer pointer

    Between any Event::InterruptPipe generated by the host bus, and the next corresponding call to pipe_continue, the host bus must not access or modify the buffer.

    For In pipes, the host will only read from this buffer, for Out pipes it will only write to it.

    -
source

fn release_interrupt_pipe(&mut self, pipe_ref: u8)

Release a pipe created with create_interrupt_pipe

+
source

fn release_interrupt_pipe(&mut self, pipe_ref: u8)

Release a pipe created with create_interrupt_pipe

After a pipe is released, the pipe_ref as well as the buffer used by the pipe can be re-used.

-
source

fn pipe_continue(&self, pipe_ref: u8)

Signal that a pipe can continue transfers

+
source

fn pipe_continue(&mut self, pipe_ref: u8)

Signal that a pipe can continue transfers

For an In pipe this is called after the driver(s) have consumed the data. For an Out pipe this is called after new data has been placed in the buffer .

-
source

fn interrupt_on_sof(&mut self, enable: bool)

Enable/disable interrupt on SOF

+
source

fn interrupt_on_sof(&mut self, enable: bool)

Enable/disable interrupt on SOF

While enabled, the host bus should generate (call poll on the hsot) whenever a start-of-frame is sent. This is used by the enumeration process to implement wait times.

If the controller does not support SOF interrupts natively, they can be implemented with a platform-specific timer.

-

Provided Methods§

source

fn write_data_out(&mut self, data: &[u8])

Write a DATA OUT packet to the bus, after loading the given data into the output buffer

+

Provided Methods§

source

fn write_data_out(&mut self, data: &[u8])

Write a DATA OUT packet to the bus, after loading the given data into the output buffer

Once all data has been sent, a Event::TransComplete must be generated.

The default implementation is a wrapper around HostBus::prepare_data_out followed by HostBus::write_data_out_prepared.

Implementors§

\ No newline at end of file diff --git a/doc/usbh/descriptor/constant.TYPE_CONFIGURATION.html b/doc/usbh/descriptor/constant.TYPE_CONFIGURATION.html index 9400ec3..85dee79 100644 --- a/doc/usbh/descriptor/constant.TYPE_CONFIGURATION.html +++ b/doc/usbh/descriptor/constant.TYPE_CONFIGURATION.html @@ -1,2 +1,2 @@ -TYPE_CONFIGURATION in usbh::descriptor - Rust
pub const TYPE_CONFIGURATION: u8 = 2;
Expand description

descriptor_type identifying a ConfigurationDescriptor

+TYPE_CONFIGURATION in usbh::descriptor - Rust
pub const TYPE_CONFIGURATION: u8 = 2;
Expand description
\ No newline at end of file diff --git a/doc/usbh/descriptor/constant.TYPE_DEVICE.html b/doc/usbh/descriptor/constant.TYPE_DEVICE.html index 7bdbf45..08fd38a 100644 --- a/doc/usbh/descriptor/constant.TYPE_DEVICE.html +++ b/doc/usbh/descriptor/constant.TYPE_DEVICE.html @@ -1,2 +1,2 @@ -TYPE_DEVICE in usbh::descriptor - Rust

Constant usbh::descriptor::TYPE_DEVICE

source ·
pub const TYPE_DEVICE: u8 = 1;
Expand description

descriptor_type identifying a DeviceDescriptor

+TYPE_DEVICE in usbh::descriptor - Rust

Constant usbh::descriptor::TYPE_DEVICE

source ·
pub const TYPE_DEVICE: u8 = 1;
Expand description
\ No newline at end of file diff --git a/doc/usbh/descriptor/constant.TYPE_ENDPOINT.html b/doc/usbh/descriptor/constant.TYPE_ENDPOINT.html index dca52a7..f6aed6a 100644 --- a/doc/usbh/descriptor/constant.TYPE_ENDPOINT.html +++ b/doc/usbh/descriptor/constant.TYPE_ENDPOINT.html @@ -1,2 +1,2 @@ -TYPE_ENDPOINT in usbh::descriptor - Rust

Constant usbh::descriptor::TYPE_ENDPOINT

source ·
pub const TYPE_ENDPOINT: u8 = 5;
Expand description

descriptor_type identifying an EndpointDescriptor

+TYPE_ENDPOINT in usbh::descriptor - Rust

Constant usbh::descriptor::TYPE_ENDPOINT

source ·
pub const TYPE_ENDPOINT: u8 = 5;
Expand description
\ No newline at end of file diff --git a/doc/usbh/descriptor/constant.TYPE_INTERFACE.html b/doc/usbh/descriptor/constant.TYPE_INTERFACE.html index eaed623..5948593 100644 --- a/doc/usbh/descriptor/constant.TYPE_INTERFACE.html +++ b/doc/usbh/descriptor/constant.TYPE_INTERFACE.html @@ -1,2 +1,2 @@ -TYPE_INTERFACE in usbh::descriptor - Rust
pub const TYPE_INTERFACE: u8 = 4;
Expand description

descriptor_type identifying an InterfaceDescriptor

+TYPE_INTERFACE in usbh::descriptor - Rust
pub const TYPE_INTERFACE: u8 = 4;
Expand description
\ No newline at end of file diff --git a/doc/usbh/descriptor/constant.TYPE_STRING.html b/doc/usbh/descriptor/constant.TYPE_STRING.html index 1872d22..1aea4fb 100644 --- a/doc/usbh/descriptor/constant.TYPE_STRING.html +++ b/doc/usbh/descriptor/constant.TYPE_STRING.html @@ -1,2 +1,2 @@ -TYPE_STRING in usbh::descriptor - Rust

Constant usbh::descriptor::TYPE_STRING

source ·
pub const TYPE_STRING: u8 = 3;
Expand description

descriptor_type identifying a StringDescriptor (not yet implemented)

+TYPE_STRING in usbh::descriptor - Rust

Constant usbh::descriptor::TYPE_STRING

source ·
pub const TYPE_STRING: u8 = 3;
Expand description

descriptor_type identifying a StringDescriptor (not yet implemented)

\ No newline at end of file diff --git a/doc/usbh/descriptor/enum.SynchronizationType.html b/doc/usbh/descriptor/enum.SynchronizationType.html index 7fa1196..1b917d4 100644 --- a/doc/usbh/descriptor/enum.SynchronizationType.html +++ b/doc/usbh/descriptor/enum.SynchronizationType.html @@ -1,17 +1,17 @@ -SynchronizationType in usbh::descriptor - Rust
#[repr(u8)]
pub enum SynchronizationType { +SynchronizationType in usbh::descriptor - Rust
#[repr(u8)]
pub enum SynchronizationType { NoSynchronization, Asynchronouse, Adaptive, Synchronous, }
Expand description

Synchronization type for an Isochronous endpoint

-

Variants§

§

NoSynchronization

§

Asynchronouse

§

Adaptive

§

Synchronous

Trait Implementations§

source§

impl Clone for SynchronizationType

source§

fn clone(&self) -> SynchronizationType

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 SynchronizationType

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§

§

NoSynchronization

§

Asynchronouse

§

Adaptive

§

Synchronous

Trait Implementations§

source§

impl Clone for SynchronizationType

source§

fn clone(&self) -> SynchronizationType

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 SynchronizationType

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).

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 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 diff --git a/doc/usbh/descriptor/enum.UsageType.html b/doc/usbh/descriptor/enum.UsageType.html index 92021a5..6fda903 100644 --- a/doc/usbh/descriptor/enum.UsageType.html +++ b/doc/usbh/descriptor/enum.UsageType.html @@ -1,17 +1,17 @@ -UsageType in usbh::descriptor - Rust
#[repr(u8)]
pub enum UsageType { +UsageType in usbh::descriptor - Rust
#[repr(u8)]
pub enum UsageType { Data, Feedback, ImplicitFeedbackData, Reserved, }
Expand description

Usage type for an Isochronous endpoint

-

Variants§

§

Data

§

Feedback

§

ImplicitFeedbackData

§

Reserved

Trait Implementations§

source§

impl Clone for UsageType

source§

fn clone(&self) -> UsageType

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 UsageType

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§

§

Data

§

Feedback

§

ImplicitFeedbackData

§

Reserved

Trait Implementations§

source§

impl Clone for UsageType

source§

fn clone(&self) -> UsageType

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 UsageType

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).

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 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 diff --git a/doc/usbh/descriptor/index.html b/doc/usbh/descriptor/index.html index 833bf40..2cc0bd5 100644 --- a/doc/usbh/descriptor/index.html +++ b/doc/usbh/descriptor/index.html @@ -1,4 +1,4 @@ -usbh::descriptor - Rust

Module usbh::descriptor

source ·
Expand description

Types for (standard) descriptors

+usbh::descriptor - Rust

Module usbh::descriptor

source ·
Expand description

Types for (standard) descriptors

This module contains types to represent various USB descriptors.

The parse submodule contains functions for parsing raw descriptors into these structures.

All descriptors have a common framing: the first two bytes contain the descriptor length and type respectively. diff --git a/doc/usbh/descriptor/parse/fn.any_descriptor.html b/doc/usbh/descriptor/parse/fn.any_descriptor.html index a7548cc..64e2cf9 100644 --- a/doc/usbh/descriptor/parse/fn.any_descriptor.html +++ b/doc/usbh/descriptor/parse/fn.any_descriptor.html @@ -1,4 +1,4 @@ -any_descriptor in usbh::descriptor::parse - Rust

pub fn any_descriptor(input: &[u8]) -> IResult<&[u8], Descriptor<'_>>
Expand description

Parse outer framing of a descriptor

+any_descriptor in usbh::descriptor::parse - Rust
pub fn any_descriptor(input: &[u8]) -> IResult<&[u8], Descriptor<'_>>
Expand description

Parse outer framing of a descriptor

The resulting data within the descriptor can then be parsed with one of the other functions below, depending on the type.

\ No newline at end of file diff --git a/doc/usbh/descriptor/parse/fn.bcd_16.html b/doc/usbh/descriptor/parse/fn.bcd_16.html index 2ad8c20..34f9388 100644 --- a/doc/usbh/descriptor/parse/fn.bcd_16.html +++ b/doc/usbh/descriptor/parse/fn.bcd_16.html @@ -1,3 +1,3 @@ -bcd_16 in usbh::descriptor::parse - Rust

Function usbh::descriptor::parse::bcd_16

source ·
pub fn bcd_16(input: &[u8]) -> IResult<&[u8], Bcd16>
Expand description

Parses a 16-bit binary coded decimal value

+bcd_16 in usbh::descriptor::parse - Rust

Function usbh::descriptor::parse::bcd_16

source ·
pub fn bcd_16(input: &[u8]) -> IResult<&[u8], Bcd16>
Expand description

Parses a 16-bit binary coded decimal value

Succeeds only if the data is indeed a valid value. This requires all four nibbles (i.e. half-bytes) to be in the 0-9 range.

\ No newline at end of file diff --git a/doc/usbh/descriptor/parse/fn.configuration_descriptor.html b/doc/usbh/descriptor/parse/fn.configuration_descriptor.html index 9c21260..1406aae 100644 --- a/doc/usbh/descriptor/parse/fn.configuration_descriptor.html +++ b/doc/usbh/descriptor/parse/fn.configuration_descriptor.html @@ -1,4 +1,4 @@ -configuration_descriptor in usbh::descriptor::parse - Rust
pub fn configuration_descriptor(
-    input: &[u8]
-) -> IResult<&[u8], ConfigurationDescriptor>
Expand description

Parse descriptor data for a configuration

+configuration_descriptor in usbh::descriptor::parse - Rust
pub fn configuration_descriptor(
+    input: &[u8]
+) -> IResult<&[u8], ConfigurationDescriptor>
Expand description

Parse descriptor data for a configuration

\ No newline at end of file diff --git a/doc/usbh/descriptor/parse/fn.configuration_descriptor_length.html b/doc/usbh/descriptor/parse/fn.configuration_descriptor_length.html index 97279bc..53acbb2 100644 --- a/doc/usbh/descriptor/parse/fn.configuration_descriptor_length.html +++ b/doc/usbh/descriptor/parse/fn.configuration_descriptor_length.html @@ -1,2 +1,2 @@ -configuration_descriptor_length in usbh::descriptor::parse - Rust
pub fn configuration_descriptor_length(input: &[u8]) -> IResult<&[u8], u16>
Expand description

Parse only the total_length from a (partial) configuration descriptor

+configuration_descriptor_length in usbh::descriptor::parse - Rust
pub fn configuration_descriptor_length(input: &[u8]) -> IResult<&[u8], u16>
Expand description

Parse only the total_length from a (partial) configuration descriptor

\ No newline at end of file diff --git a/doc/usbh/descriptor/parse/fn.device_descriptor.html b/doc/usbh/descriptor/parse/fn.device_descriptor.html index 11538c5..643d81e 100644 --- a/doc/usbh/descriptor/parse/fn.device_descriptor.html +++ b/doc/usbh/descriptor/parse/fn.device_descriptor.html @@ -1,2 +1,2 @@ -device_descriptor in usbh::descriptor::parse - Rust
pub fn device_descriptor(input: &[u8]) -> IResult<&[u8], DeviceDescriptor>
Expand description

Parse descriptor data for a device

+device_descriptor in usbh::descriptor::parse - Rust
pub fn device_descriptor(input: &[u8]) -> IResult<&[u8], DeviceDescriptor>
Expand description

Parse descriptor data for a device

\ No newline at end of file diff --git a/doc/usbh/descriptor/parse/fn.endpoint_descriptor.html b/doc/usbh/descriptor/parse/fn.endpoint_descriptor.html index dea2838..62adaa9 100644 --- a/doc/usbh/descriptor/parse/fn.endpoint_descriptor.html +++ b/doc/usbh/descriptor/parse/fn.endpoint_descriptor.html @@ -1,2 +1,2 @@ -endpoint_descriptor in usbh::descriptor::parse - Rust
pub fn endpoint_descriptor(input: &[u8]) -> IResult<&[u8], EndpointDescriptor>
Expand description

Parse descriptor data for an endpoint

+endpoint_descriptor in usbh::descriptor::parse - Rust
pub fn endpoint_descriptor(input: &[u8]) -> IResult<&[u8], EndpointDescriptor>
Expand description

Parse descriptor data for an endpoint

\ No newline at end of file diff --git a/doc/usbh/descriptor/parse/fn.interface_descriptor.html b/doc/usbh/descriptor/parse/fn.interface_descriptor.html index d6b567e..b81601c 100644 --- a/doc/usbh/descriptor/parse/fn.interface_descriptor.html +++ b/doc/usbh/descriptor/parse/fn.interface_descriptor.html @@ -1,2 +1,2 @@ -interface_descriptor in usbh::descriptor::parse - Rust
pub fn interface_descriptor(input: &[u8]) -> IResult<&[u8], InterfaceDescriptor>
Expand description

Parse descriptor data for an interface

+interface_descriptor in usbh::descriptor::parse - Rust
pub fn interface_descriptor(input: &[u8]) -> IResult<&[u8], InterfaceDescriptor>
Expand description

Parse descriptor data for an interface

\ No newline at end of file diff --git a/doc/usbh/descriptor/parse/index.html b/doc/usbh/descriptor/parse/index.html index 930028c..fb284d0 100644 --- a/doc/usbh/descriptor/parse/index.html +++ b/doc/usbh/descriptor/parse/index.html @@ -1 +1 @@ -usbh::descriptor::parse - Rust

Module usbh::descriptor::parse

source ·

Functions

\ No newline at end of file +usbh::descriptor::parse - Rust

Module usbh::descriptor::parse

source ·

Functions

\ No newline at end of file diff --git a/doc/usbh/descriptor/struct.ConfigurationAttributes.html b/doc/usbh/descriptor/struct.ConfigurationAttributes.html index 795edac..4c04f29 100644 --- a/doc/usbh/descriptor/struct.ConfigurationAttributes.html +++ b/doc/usbh/descriptor/struct.ConfigurationAttributes.html @@ -1,17 +1,17 @@ -ConfigurationAttributes in usbh::descriptor - Rust
pub struct ConfigurationAttributes(_);

Implementations§

source§

impl ConfigurationAttributes

source

pub fn self_powered(&self) -> bool

A device configuration reports whether the configuration is bus-powered or self-powered.

+ConfigurationAttributes in usbh::descriptor - Rust
pub struct ConfigurationAttributes(_);

Implementations§

source§

impl ConfigurationAttributes

source

pub fn self_powered(&self) -> bool

A device configuration reports whether the configuration is bus-powered or self-powered.

Device status reports whether the device is currently self-powered. If a device is disconnected from its external power source, it updates device status to indicate that it is no longer self-powered.

-
source

pub fn remote_wakeup(&self) -> bool

Device supports remote wakeup

-

Trait Implementations§

source§

impl Clone for ConfigurationAttributes

source§

fn clone(&self) -> ConfigurationAttributes

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 Format for ConfigurationAttributes

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl Copy for ConfigurationAttributes

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).

+
source

pub fn remote_wakeup(&self) -> bool

Device supports remote wakeup

+

Trait Implementations§

source§

impl Clone for ConfigurationAttributes

source§

fn clone(&self) -> ConfigurationAttributes

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 Format for ConfigurationAttributes

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl Copy for ConfigurationAttributes

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).

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 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 diff --git a/doc/usbh/descriptor/struct.ConfigurationDescriptor.html b/doc/usbh/descriptor/struct.ConfigurationDescriptor.html index fbff292..e205f35 100644 --- a/doc/usbh/descriptor/struct.ConfigurationDescriptor.html +++ b/doc/usbh/descriptor/struct.ConfigurationDescriptor.html @@ -1,30 +1,30 @@ -ConfigurationDescriptor in usbh::descriptor - Rust
pub struct ConfigurationDescriptor {
-    pub total_length: u16,
-    pub num_interfaces: u8,
-    pub value: u8,
-    pub index: u8,
+ConfigurationDescriptor in usbh::descriptor - Rust
pub struct ConfigurationDescriptor {
+    pub total_length: u16,
+    pub num_interfaces: u8,
+    pub value: u8,
+    pub index: u8,
     pub attributes: ConfigurationAttributes,
-    pub max_power: u8,
+    pub max_power: u8,
 }
Expand description

The configuration descriptor describes information about a specific device configuration.

The descriptor contains a bConfigurationValue field with a value that, when used as a parameter to the SetConfiguration() request, causes the device to assume the described configuration.

-

Fields§

§total_length: u16

Total length of data returned for this configuration.

+

Fields§

§total_length: u16

Total length of data returned for this configuration.

Includes the combined length of all descriptors (configuration, interface, endpoint, and class- or vendor-specific) returned for this configuration.

-
§num_interfaces: u8

Number of interfaces supported by this configuration

-
§value: u8

Value to use as an argument to the SetConfiguration() request to select this configuration

-
§index: u8

Index of string descriptor describing this configuration

+
§num_interfaces: u8

Number of interfaces supported by this configuration

+
§value: u8

Value to use as an argument to the SetConfiguration() request to select this configuration

+
§index: u8

Index of string descriptor describing this configuration

§attributes: ConfigurationAttributes

Configuration characteristics

-
§max_power: u8

Maximum power consumption of the USB device from the bus in this specific configuration when the device is fully operational.

+
§max_power: u8

Maximum power consumption of the USB device from the bus in this specific configuration when the device is fully operational.

Expressed in 2 mA units (i.e., 50 = 100 mA).

-

Trait Implementations§

source§

impl Format for ConfigurationDescriptor

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.

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).

+

Trait Implementations§

source§

impl Format for ConfigurationDescriptor

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.

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).

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 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 diff --git a/doc/usbh/descriptor/struct.Descriptor.html b/doc/usbh/descriptor/struct.Descriptor.html index b3641c2..eb800e3 100644 --- a/doc/usbh/descriptor/struct.Descriptor.html +++ b/doc/usbh/descriptor/struct.Descriptor.html @@ -1,21 +1,21 @@ -Descriptor in usbh::descriptor - Rust

Struct usbh::descriptor::Descriptor

source ·
pub struct Descriptor<'a> {
-    pub length: u8,
-    pub descriptor_type: u8,
-    pub data: &'a [u8],
+Descriptor in usbh::descriptor - Rust

Struct usbh::descriptor::Descriptor

source ·
pub struct Descriptor<'a> {
+    pub length: u8,
+    pub descriptor_type: u8,
+    pub data: &'a [u8],
 }
Expand description

Outer framing of a descriptor

-

Fields§

§length: u8

Total length of the descriptor, including this length byte itself and the descriptor_type byte

-
§descriptor_type: u8

Type of descriptor. If this is a standard descriptor, it corresponds to one of the TYPE_* constants, +

Fields§

§length: u8

Total length of the descriptor, including this length byte itself and the descriptor_type byte

+
§descriptor_type: u8

Type of descriptor. If this is a standard descriptor, it corresponds to one of the TYPE_* constants, otherwise it is class or vendor specific.

-
§data: &'a [u8]

Remaining data of the descriptor. Usually length - 2 bytes long, except the descriptor may be truncated +

§data: &'a [u8]

Remaining data of the descriptor. Usually length - 2 bytes long, except the descriptor may be truncated if less data was requested, or the data did not fully fit into the control buffer.

-

Auto Trait Implementations§

§

impl<'a> RefUnwindSafe for Descriptor<'a>

§

impl<'a> Send for Descriptor<'a>

§

impl<'a> Sync for Descriptor<'a>

§

impl<'a> Unpin for Descriptor<'a>

§

impl<'a> UnwindSafe for Descriptor<'a>

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).

+

Auto Trait Implementations§

§

impl<'a> RefUnwindSafe for Descriptor<'a>

§

impl<'a> Send for Descriptor<'a>

§

impl<'a> Sync for Descriptor<'a>

§

impl<'a> Unpin for Descriptor<'a>

§

impl<'a> UnwindSafe for Descriptor<'a>

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).

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 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 diff --git a/doc/usbh/descriptor/struct.DeviceDescriptor.html b/doc/usbh/descriptor/struct.DeviceDescriptor.html index 4bede38..4a37b7b 100644 --- a/doc/usbh/descriptor/struct.DeviceDescriptor.html +++ b/doc/usbh/descriptor/struct.DeviceDescriptor.html @@ -1,32 +1,32 @@ -DeviceDescriptor in usbh::descriptor - Rust
pub struct DeviceDescriptor {
+DeviceDescriptor in usbh::descriptor - Rust
pub struct DeviceDescriptor {
     pub usb_release: Bcd16,
-    pub device_class: u8,
-    pub device_sub_class: u8,
-    pub device_protocol: u8,
-    pub max_packet_size: u8,
-    pub id_vendor: u16,
-    pub id_product: u16,
+    pub device_class: u8,
+    pub device_sub_class: u8,
+    pub device_protocol: u8,
+    pub max_packet_size: u8,
+    pub id_vendor: u16,
+    pub id_product: u16,
     pub device_release: Bcd16,
-    pub manufacturer_index: u8,
-    pub product_index: u8,
-    pub serial_number_index: u8,
-    pub num_configurations: u8,
+    pub manufacturer_index: u8,
+    pub product_index: u8,
+    pub serial_number_index: u8,
+    pub num_configurations: u8,
 }
Expand description

A device descriptor describes general information about a USB device. It includes information that applies globally to the device and all of the device’s configurations. A USB device has only one device descriptor.

Fields§

§usb_release: Bcd16

USB Specification Release Number in Binary-Coded Decimal (i.e., 2.10 is 210H).

This field identifies the release of the USB Specification with which the device and its descriptors are compliant.

-
§device_class: u8

Class code (assigned by the USB-IF).

+
§device_class: u8

Class code (assigned by the USB-IF).

If this field is reset to zero, each interface within a configuration specifies its own class information and the various interfaces operate independently.

If this field is set to a value between 1 and FEH, the device supports different class specifications on different interfaces and the interfaces may not operate independently.

This value identifies the class definition used for the aggregate interfaces. If this field is set to FFH, the device class is vendor-specific.

-
§device_sub_class: u8

Subclass code (assigned by the USB-IF).

+
§device_sub_class: u8

Subclass code (assigned by the USB-IF).

These codes are qualified by the value of the bDeviceClass field. If the bDeviceClass field is reset to zero, this field must also be reset to zero. If the bDeviceClass field is not set to FFH, all values are reserved for assignment by the USB-IF.

-
§device_protocol: u8

Protocol code (assigned by the USB-IF). +

§device_protocol: u8

Protocol code (assigned by the USB-IF). These codes are qualified by the value of the bDeviceClass and the bDeviceSubClass fields.

If a device supports class-specific protocols on a device basis as opposed to an interface basis, this code identifies the protocols that the device uses as defined by the @@ -34,23 +34,23 @@ If this field is reset to zero, the device does not use class-specific protocols on a device basis. However, it may use class- specific protocols on an interface basis. If this field is set to FFH, the device uses a vendor-specific protocol on a device basis.

-
§max_packet_size: u8

Maximum packet size for endpoint zero

+
§max_packet_size: u8

Maximum packet size for endpoint zero

(only 8, 16, 32, or 64 are valid)

-
§id_vendor: u16

Vendor ID (assigned by the USB-IF)

-
§id_product: u16

Product ID (assigned by the manufacturer)

+
§id_vendor: u16

Vendor ID (assigned by the USB-IF)

+
§id_product: u16

Product ID (assigned by the manufacturer)

§device_release: Bcd16

Device release number in binary-coded decimal

-
§manufacturer_index: u8

Index of string descriptor describing manufacturer

-
§product_index: u8

Index of string descriptor describing product

-
§serial_number_index: u8

Index of string descriptor describing the device’s serial number

-
§num_configurations: u8

Number of possible configurations

-

Trait Implementations§

source§

impl Format for DeviceDescriptor

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.

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).

+
§manufacturer_index: u8

Index of string descriptor describing manufacturer

+
§product_index: u8

Index of string descriptor describing product

+
§serial_number_index: u8

Index of string descriptor describing the device’s serial number

+
§num_configurations: u8

Number of possible configurations

+

Trait Implementations§

source§

impl Format for DeviceDescriptor

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.

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).

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 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 diff --git a/doc/usbh/descriptor/struct.EndpointAddress.html b/doc/usbh/descriptor/struct.EndpointAddress.html index d17da66..c3bbf27 100644 --- a/doc/usbh/descriptor/struct.EndpointAddress.html +++ b/doc/usbh/descriptor/struct.EndpointAddress.html @@ -1,16 +1,16 @@ -EndpointAddress in usbh::descriptor - Rust
pub struct EndpointAddress(_);
Expand description

Address of an endpoint

+EndpointAddress in usbh::descriptor - Rust
pub struct EndpointAddress(_);
Expand description

Address of an endpoint

Part of an EndpointDescriptor.

-

Implementations§

source§

impl EndpointAddress

source

pub fn number(&self) -> u8

Endpoint number

+

Implementations§

source§

impl EndpointAddress

source

pub fn number(&self) -> u8

Endpoint number

Ranges from 1 to 15.

-
source

pub fn direction(&self) -> UsbDirection

Direction of the endpoint

-

Trait Implementations§

source§

impl Clone for EndpointAddress

source§

fn clone(&self) -> EndpointAddress

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 Format for EndpointAddress

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl Copy for EndpointAddress

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).

+
source

pub fn direction(&self) -> UsbDirection

Direction of the endpoint

+

Trait Implementations§

source§

impl Clone for EndpointAddress

source§

fn clone(&self) -> EndpointAddress

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 Format for EndpointAddress

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl Copy for EndpointAddress

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).

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 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 diff --git a/doc/usbh/descriptor/struct.EndpointAttributes.html b/doc/usbh/descriptor/struct.EndpointAttributes.html index ed087d1..09bd3e7 100644 --- a/doc/usbh/descriptor/struct.EndpointAttributes.html +++ b/doc/usbh/descriptor/struct.EndpointAttributes.html @@ -1,15 +1,15 @@ -EndpointAttributes in usbh::descriptor - Rust
pub struct EndpointAttributes(_);
Expand description

Attributes of an endpoint

+EndpointAttributes in usbh::descriptor - Rust
pub struct EndpointAttributes(_);
Expand description

Attributes of an endpoint

Part of an EndpointDescriptor.

-

Implementations§

source§

impl EndpointAttributes

source

pub fn transfer_type(&self) -> TransferType

source

pub fn synchronization_type(&self) -> SynchronizationType

Synchronization type. Only valid for Isochronous endpoint.

-
source

pub fn usage_type(&self) -> UsageType

Usage type. Only valid for Isochronous endpoint.

-

Trait Implementations§

source§

impl Clone for EndpointAttributes

source§

fn clone(&self) -> EndpointAttributes

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 Format for EndpointAttributes

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl Copy for EndpointAttributes

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 EndpointAttributes

source

pub fn transfer_type(&self) -> TransferType

source

pub fn synchronization_type(&self) -> SynchronizationType

Synchronization type. Only valid for Isochronous endpoint.

+
source

pub fn usage_type(&self) -> UsageType

Usage type. Only valid for Isochronous endpoint.

+

Trait Implementations§

source§

impl Clone for EndpointAttributes

source§

fn clone(&self) -> EndpointAttributes

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 Format for EndpointAttributes

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl Copy for EndpointAttributes

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).

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 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 diff --git a/doc/usbh/descriptor/struct.EndpointDescriptor.html b/doc/usbh/descriptor/struct.EndpointDescriptor.html index dea6f93..75f808a 100644 --- a/doc/usbh/descriptor/struct.EndpointDescriptor.html +++ b/doc/usbh/descriptor/struct.EndpointDescriptor.html @@ -1,23 +1,23 @@ -EndpointDescriptor in usbh::descriptor - Rust
pub struct EndpointDescriptor {
+EndpointDescriptor in usbh::descriptor - Rust
pub struct EndpointDescriptor {
     pub address: EndpointAddress,
     pub attributes: EndpointAttributes,
-    pub max_packet_size: u16,
-    pub interval: u8,
+    pub max_packet_size: u16,
+    pub interval: u8,
 }
Expand description

Each endpoint used for an interface has its own descriptor.

This descriptor contains the information required by the host to determine the bandwidth requirements of each endpoint.

Fields§

§address: EndpointAddress

The address of the endpoint on the USB device described by this descriptor.

§attributes: EndpointAttributes

This field describes the endpoint’s attributes when it is configured using the bConfigurationValue.

-
§max_packet_size: u16

Maximum packet size this endpoint is capable of sending or receiving when this configuration is selected.

-
§interval: u8

Interval for polling endpoint for data transfers.

+
§max_packet_size: u16

Maximum packet size this endpoint is capable of sending or receiving when this configuration is selected.

+
§interval: u8

Interval for polling endpoint for data transfers.

Expressed in frames (1 millisecond).

-

Trait Implementations§

source§

impl Format for EndpointDescriptor

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.

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).

+

Trait Implementations§

source§

impl Format for EndpointDescriptor

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.

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).

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 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 diff --git a/doc/usbh/descriptor/struct.InterfaceDescriptor.html b/doc/usbh/descriptor/struct.InterfaceDescriptor.html index c6f0992..ba7327c 100644 --- a/doc/usbh/descriptor/struct.InterfaceDescriptor.html +++ b/doc/usbh/descriptor/struct.InterfaceDescriptor.html @@ -1,32 +1,32 @@ -InterfaceDescriptor in usbh::descriptor - Rust
pub struct InterfaceDescriptor {
-    pub interface_number: u8,
-    pub alternate_setting: u8,
-    pub num_endpoints: u8,
-    pub interface_class: u8,
-    pub interface_sub_class: u8,
-    pub interface_protocol: u8,
-    pub interface_index: u8,
+InterfaceDescriptor in usbh::descriptor - Rust
pub struct InterfaceDescriptor {
+    pub interface_number: u8,
+    pub alternate_setting: u8,
+    pub num_endpoints: u8,
+    pub interface_class: u8,
+    pub interface_sub_class: u8,
+    pub interface_protocol: u8,
+    pub interface_index: u8,
 }
Expand description

The interface descriptor describes a specific interface within a configuration. A configuration provides one or more interfaces, each with zero or more endpoint descriptors describing a unique set of endpoints within the configuration. When a configuration supports more than one interface, the endpoint descriptors for a particular interface follow the interface descriptor in the data returned by the GetConfiguration() request. An interface descriptor is always returned as part of a configuration descriptor. Interface descriptors cannot be directly accessed with a GetDescriptor() or SetDescriptor() request.

-

Fields§

§interface_number: u8

Number of this interface.

+

Fields§

§interface_number: u8

Number of this interface.

Zero-based value identifying the index in the array of concurrent interfaces supported by this configuration.

-
§alternate_setting: u8

Value used to select this alternate setting for the interface identified in the prior field

-
§num_endpoints: u8

Number of endpoints used by this interface (excluding endpoint zero).

+
§alternate_setting: u8

Value used to select this alternate setting for the interface identified in the prior field

+
§num_endpoints: u8

Number of endpoints used by this interface (excluding endpoint zero).

If this value is zero, this interface only uses the Default Control Pipe.

-
§interface_class: u8

Class code (assigned by the USB-IF).

+
§interface_class: u8

Class code (assigned by the USB-IF).

A value of zero is reserved for future standardization. If this field is set to FFH, the interface class is vendor-specific. All other values are reserved for assignment by the USB-IF.

-
§interface_sub_class: u8

Subclass code (assigned by the USB-IF).

+
§interface_sub_class: u8

Subclass code (assigned by the USB-IF).

These codes are qualified by the value of the bInterfaceClass field. If the bInterfaceClass field is reset to zero, this field must also be reset to zero. If the bInterfaceClass field is not set to FFH, all values are reserved for assignment by the USB-IF.

-
§interface_protocol: u8

Protocol code (assigned by the USB).

+
§interface_protocol: u8

Protocol code (assigned by the USB).

These codes are qualified by the value of the bInterfaceClass and the bInterfaceSubClass fields. If an interface supports class-specific requests, this code identifies the protocols that the device uses as defined by the specification of the @@ -34,15 +34,15 @@ If this field is reset to zero, the device does not use a class-specific protocol on this interface. If this field is set to FFH, the device uses a vendor-specific protocol for this interface.

-
§interface_index: u8

Index of string descriptor describing this interface

-

Trait Implementations§

source§

impl Format for InterfaceDescriptor

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.

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).

+
§interface_index: u8

Index of string descriptor describing this interface

+

Trait Implementations§

source§

impl Format for InterfaceDescriptor

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.

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).

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 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 diff --git a/doc/usbh/driver/detector/index.html b/doc/usbh/driver/detector/index.html index 21cea7e..baaa0e0 100644 --- a/doc/usbh/driver/detector/index.html +++ b/doc/usbh/driver/detector/index.html @@ -1,2 +1,2 @@ -usbh::driver::detector - Rust

Module usbh::driver::detector

source ·
Expand description

Helpers for detecting USB devices from drivers

+usbh::driver::detector - Rust

Module usbh::driver::detector

source ·
Expand description

Helpers for detecting USB devices from drivers

Structs

\ No newline at end of file diff --git a/doc/usbh/driver/detector/struct.SimpleDetector.html b/doc/usbh/driver/detector/struct.SimpleDetector.html index 8acfff8..5485b21 100644 --- a/doc/usbh/driver/detector/struct.SimpleDetector.html +++ b/doc/usbh/driver/detector/struct.SimpleDetector.html @@ -1,22 +1,21 @@ -SimpleDetector in usbh::driver::detector - Rust
pub struct SimpleDetector<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> { /* private fields */ }

Implementations§

source§

impl<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>

source

pub fn attached(&mut self, dev_addr: DeviceAddress)

source

pub fn detached(&mut self, _dev_addr: DeviceAddress)

source

pub fn descriptor( +SimpleDetector in usbh::driver::detector - Rust
pub struct SimpleDetector<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> { /* private fields */ }

Implementations§

source§

impl<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>

source

pub fn attached(&mut self, dev_addr: DeviceAddress)

source

pub fn detached(&mut self, _dev_addr: DeviceAddress)

source

pub fn descriptor( &mut self, dev_addr: DeviceAddress, - descriptor_type: u8, - data: &[u8] -)

source

pub fn configure(&mut self, dev_addr: DeviceAddress) -> Option<u8>

source

pub fn configured( + descriptor_type: u8, + data: &[u8] +)

source

pub fn configure(&mut self, dev_addr: DeviceAddress) -> Option<u8>

source

pub fn configured( &mut self, dev_addr: DeviceAddress, - value: u8 -) -> Option<(u8, (u8, u16, u8))>

Trait Implementations§

source§

impl<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> Default for SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>

source§

fn default( - -) -> SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> RefUnwindSafe for SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>

§

impl<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> Send for SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>

§

impl<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> Sync for SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>

§

impl<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> Unpin for SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>

§

impl<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> UnwindSafe for SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>

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).

+ value: u8 +) -> Option<(u8, (u8, u16, u8))>

Trait Implementations§

source§

impl<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> Default for SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>

source§

fn default( +) -> SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> RefUnwindSafe for SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>

§

impl<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> Send for SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>

§

impl<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> Sync for SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>

§

impl<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> Unpin for SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>

§

impl<const CLASS_CODE: u8, const SUB_CLASS_CODE: u8, const EP_DIRECTION: u8, const EP_TYPE: u8> UnwindSafe for SimpleDetector<CLASS_CODE, SUB_CLASS_CODE, EP_DIRECTION, EP_TYPE>

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).

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 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 diff --git a/doc/usbh/driver/hub/enum.HubError.html b/doc/usbh/driver/hub/enum.HubError.html index 4e9f166..cb4b405 100644 --- a/doc/usbh/driver/hub/enum.HubError.html +++ b/doc/usbh/driver/hub/enum.HubError.html @@ -1,18 +1,18 @@ -HubError in usbh::driver::hub - Rust

Enum usbh::driver::hub::HubError

source ·
pub enum HubError {
+HubError in usbh::driver::hub - Rust

Enum usbh::driver::hub::HubError

source ·
pub enum HubError {
     ControlError(ControlError),
     UnknownDevice,
 }
Expand description

Error type for interactions with the driver

Variants§

§

ControlError(ControlError)

Error initiating control transfer

§

UnknownDevice

The given DeviceAddress is not known.

This can happen if the device was removed meanwhile.

-

Trait Implementations§

source§

impl Clone for HubError

source§

fn clone(&self) -> HubError

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<ControlError> for HubError

source§

fn from(e: ControlError) -> Self

Converts to this type from the input type.
source§

impl Copy for HubError

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).

+

Trait Implementations§

source§

impl Clone for HubError

source§

fn clone(&self) -> HubError

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<ControlError> for HubError

source§

fn from(e: ControlError) -> Self

Converts to this type from the input type.
source§

impl Copy for HubError

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).

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 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 diff --git a/doc/usbh/driver/hub/enum.HubEvent.html b/doc/usbh/driver/hub/enum.HubEvent.html index 1e196fb..6b3b94b 100644 --- a/doc/usbh/driver/hub/enum.HubEvent.html +++ b/doc/usbh/driver/hub/enum.HubEvent.html @@ -1,22 +1,22 @@ -HubEvent in usbh::driver::hub - Rust

Enum usbh::driver::hub::HubEvent

source ·
pub enum HubEvent {
+HubEvent in usbh::driver::hub - Rust

Enum usbh::driver::hub::HubEvent

source ·
pub enum HubEvent {
     HubAdded(DeviceAddress),
     HubRemoved(DeviceAddress),
     Stall(DeviceAddress),
     HubDescriptor(DeviceAddress, HubDescriptor),
     HubStatus(DeviceAddress, HubStatus),
-    PortStatus(DeviceAddress, u8, PortStatus),
-    PortFeatureSet(DeviceAddress, u8, PortFeature),
-    PortFeatureClear(DeviceAddress, u8, PortFeature),
+    PortStatus(DeviceAddress, u8, PortStatus),
+    PortFeatureSet(DeviceAddress, u8, PortFeature),
+    PortFeatureClear(DeviceAddress, u8, PortFeature),
     HubStatusChange(DeviceAddress),
-    PortStatusChange(DeviceAddress, u8),
-}

Variants§

§

HubAdded(DeviceAddress)

§

HubRemoved(DeviceAddress)

§

Stall(DeviceAddress)

§

HubDescriptor(DeviceAddress, HubDescriptor)

§

HubStatus(DeviceAddress, HubStatus)

§

PortStatus(DeviceAddress, u8, PortStatus)

§

PortFeatureSet(DeviceAddress, u8, PortFeature)

§

PortFeatureClear(DeviceAddress, u8, PortFeature)

§

HubStatusChange(DeviceAddress)

§

PortStatusChange(DeviceAddress, u8)

Trait Implementations§

source§

impl Clone for HubEvent

source§

fn clone(&self) -> HubEvent

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 Format for HubEvent

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl Copy for HubEvent

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).

+ PortStatusChange(DeviceAddress, u8), +}

Variants§

§

HubAdded(DeviceAddress)

§

HubRemoved(DeviceAddress)

§

Stall(DeviceAddress)

§

HubDescriptor(DeviceAddress, HubDescriptor)

§

HubStatus(DeviceAddress, HubStatus)

§

PortStatus(DeviceAddress, u8, PortStatus)

§

PortFeatureSet(DeviceAddress, u8, PortFeature)

§

PortFeatureClear(DeviceAddress, u8, PortFeature)

§

HubStatusChange(DeviceAddress)

§

PortStatusChange(DeviceAddress, u8)

Trait Implementations§

source§

impl Clone for HubEvent

source§

fn clone(&self) -> HubEvent

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 Format for HubEvent

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl Copy for HubEvent

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).

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 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 diff --git a/doc/usbh/driver/hub/enum.PortFeature.html b/doc/usbh/driver/hub/enum.PortFeature.html index 354002f..8a7f7a2 100644 --- a/doc/usbh/driver/hub/enum.PortFeature.html +++ b/doc/usbh/driver/hub/enum.PortFeature.html @@ -1,4 +1,4 @@ -PortFeature in usbh::driver::hub - Rust

Enum usbh::driver::hub::PortFeature

source ·
#[repr(u8)]
pub enum PortFeature { +PortFeature in usbh::driver::hub - Rust

Enum usbh::driver::hub::PortFeature

source ·
#[repr(u8)]
pub enum PortFeature { Connection, Enable, Suspend, @@ -11,16 +11,16 @@ CSuspend, COverCurrent, CReset, -}

Variants§

§

Connection

§

Enable

§

Suspend

§

OverCurrent

§

Reset

§

Power

§

LowSpeed

§

CConnection

§

CEnable

§

CSuspend

§

COverCurrent

§

CReset

Trait Implementations§

source§

impl Clone for PortFeature

source§

fn clone(&self) -> PortFeature

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 Format for PortFeature

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl PartialEq<PortFeature> for PortFeature

source§

fn eq(&self, other: &PortFeature) -> 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 PortFeature

source§

impl StructuralPartialEq for PortFeature

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§

§

Connection

§

Enable

§

Suspend

§

OverCurrent

§

Reset

§

Power

§

LowSpeed

§

CConnection

§

CEnable

§

CSuspend

§

COverCurrent

§

CReset

Trait Implementations§

source§

impl Clone for PortFeature

source§

fn clone(&self) -> PortFeature

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 Format for PortFeature

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl PartialEq<PortFeature> for PortFeature

source§

fn eq(&self, other: &PortFeature) -> 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 PortFeature

source§

impl StructuralPartialEq for PortFeature

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).

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 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 diff --git a/doc/usbh/driver/hub/index.html b/doc/usbh/driver/hub/index.html index 30e68fd..bcb0bb9 100644 --- a/doc/usbh/driver/hub/index.html +++ b/doc/usbh/driver/hub/index.html @@ -1 +1 @@ -usbh::driver::hub - Rust

Module usbh::driver::hub

source ·

Structs

Enums

\ No newline at end of file +usbh::driver::hub - Rust

Module usbh::driver::hub

source ·

Structs

Enums

\ No newline at end of file diff --git a/doc/usbh/driver/hub/struct.Characteristics.html b/doc/usbh/driver/hub/struct.Characteristics.html index 5dd873f..022b93a 100644 --- a/doc/usbh/driver/hub/struct.Characteristics.html +++ b/doc/usbh/driver/hub/struct.Characteristics.html @@ -1,11 +1,11 @@ -Characteristics in usbh::driver::hub - Rust
pub struct Characteristics(_);

Trait Implementations§

source§

impl Clone for Characteristics

source§

fn clone(&self) -> Characteristics

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 Format for Characteristics

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl Copy for Characteristics

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).

+Characteristics in usbh::driver::hub - Rust
pub struct Characteristics(_);

Trait Implementations§

source§

impl Clone for Characteristics

source§

fn clone(&self) -> Characteristics

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 Format for Characteristics

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl Copy for Characteristics

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).

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 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 diff --git a/doc/usbh/driver/hub/struct.DeviceRemovable.html b/doc/usbh/driver/hub/struct.DeviceRemovable.html index be2df57..f729a93 100644 --- a/doc/usbh/driver/hub/struct.DeviceRemovable.html +++ b/doc/usbh/driver/hub/struct.DeviceRemovable.html @@ -1,11 +1,11 @@ -DeviceRemovable in usbh::driver::hub - Rust
pub struct DeviceRemovable(_);

Trait Implementations§

source§

impl Clone for DeviceRemovable

source§

fn clone(&self) -> DeviceRemovable

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 Format for DeviceRemovable

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl Copy for DeviceRemovable

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).

+DeviceRemovable in usbh::driver::hub - Rust
pub struct DeviceRemovable(_);

Trait Implementations§

source§

impl Clone for DeviceRemovable

source§

fn clone(&self) -> DeviceRemovable

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 Format for DeviceRemovable

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl Copy for DeviceRemovable

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).

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 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 diff --git a/doc/usbh/driver/hub/struct.HubDescriptor.html b/doc/usbh/driver/hub/struct.HubDescriptor.html index ae44ee4..cc61e3a 100644 --- a/doc/usbh/driver/hub/struct.HubDescriptor.html +++ b/doc/usbh/driver/hub/struct.HubDescriptor.html @@ -1,17 +1,17 @@ -HubDescriptor in usbh::driver::hub - Rust

Struct usbh::driver::hub::HubDescriptor

source ·
pub struct HubDescriptor {
-    pub port_count: u8,
+HubDescriptor in usbh::driver::hub - Rust

Struct usbh::driver::hub::HubDescriptor

source ·
pub struct HubDescriptor {
+    pub port_count: u8,
     pub characteristics: Characteristics,
-    pub power_on_to_good: u8,
-    pub control_current: u8,
+    pub power_on_to_good: u8,
+    pub control_current: u8,
     pub device_removable: DeviceRemovable,
-}

Fields§

§port_count: u8§characteristics: Characteristics§power_on_to_good: u8§control_current: u8§device_removable: DeviceRemovable

Trait Implementations§

source§

impl Clone for HubDescriptor

source§

fn clone(&self) -> HubDescriptor

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 Format for HubDescriptor

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl Copy for HubDescriptor

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).

+}

Fields§

§port_count: u8§characteristics: Characteristics§power_on_to_good: u8§control_current: u8§device_removable: DeviceRemovable

Trait Implementations§

source§

impl Clone for HubDescriptor

source§

fn clone(&self) -> HubDescriptor

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 Format for HubDescriptor

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl Copy for HubDescriptor

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).

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 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 diff --git a/doc/usbh/driver/hub/struct.HubDriver.html b/doc/usbh/driver/hub/struct.HubDriver.html index f529a2f..d4a60e2 100644 --- a/doc/usbh/driver/hub/struct.HubDriver.html +++ b/doc/usbh/driver/hub/struct.HubDriver.html @@ -1,66 +1,66 @@ -HubDriver in usbh::driver::hub - Rust

Struct usbh::driver::hub::HubDriver

source ·
pub struct HubDriver<const MAX_HUBS: usize = 4> { /* private fields */ }
Expand description

A Driver which logs various events

-

Implementations§

source§

impl<const MAX_HUBS: usize> HubDriver<MAX_HUBS>

source

pub fn new() -> Self

source

pub fn take_event(&mut self) -> Option<HubEvent>

source

pub fn get_hub_descriptor<B: HostBus>( +HubDriver in usbh::driver::hub - Rust

Struct usbh::driver::hub::HubDriver

source ·
pub struct HubDriver<const MAX_HUBS: usize = 4> { /* private fields */ }
Expand description

A Driver which logs various events

+

Implementations§

source§

impl<const MAX_HUBS: usize> HubDriver<MAX_HUBS>

source

pub fn new() -> Self

source

pub fn take_event(&mut self) -> Option<HubEvent>

source

pub fn get_hub_descriptor<B: HostBus>( &mut self, dev_addr: DeviceAddress, host: &mut UsbHost<B> -) -> Result<(), HubError>

source

pub fn get_hub_status<B: HostBus>( +) -> Result<(), HubError>

source

pub fn get_hub_status<B: HostBus>( &mut self, dev_addr: DeviceAddress, host: &mut UsbHost<B> -) -> Result<(), HubError>

source

pub fn get_port_status<B: HostBus>( +) -> Result<(), HubError>

source

pub fn get_port_status<B: HostBus>( &mut self, dev_addr: DeviceAddress, - port: u8, + port: u8, host: &mut UsbHost<B> -) -> Result<(), HubError>

source

pub fn set_port_feature<B: HostBus>( +) -> Result<(), HubError>

source

pub fn set_port_feature<B: HostBus>( &mut self, dev_addr: DeviceAddress, - port: u8, + port: u8, feature: PortFeature, host: &mut UsbHost<B> -) -> Result<(), HubError>

source

pub fn clear_port_feature<B: HostBus>( +) -> Result<(), HubError>

source

pub fn clear_port_feature<B: HostBus>( &mut self, dev_addr: DeviceAddress, - port: u8, + port: u8, feature: PortFeature, host: &mut UsbHost<B> -) -> Result<(), HubError>

Trait Implementations§

source§

impl<B: HostBus, const MAX_HUBS: usize> Driver<B> for HubDriver<MAX_HUBS>

Trait Implementations§

source§

impl<B: HostBus, const MAX_HUBS: usize> Driver<B> for HubDriver<MAX_HUBS>

source§

fn attached( &mut self, dev_addr: DeviceAddress, _connection_speed: ConnectionSpeed -)

New device was attached, and got assigned the given address. Read more
source§

fn detached(&mut self, dev_addr: DeviceAddress)

The device with the given address was detached. Read more
source§

fn descriptor( +)

New device was attached, and got assigned the given address. Read more
source§

fn detached(&mut self, dev_addr: DeviceAddress)

The device with the given address was detached. Read more
source§

fn descriptor( &mut self, dev_addr: DeviceAddress, - descriptor_type: u8, - data: &[u8] -)

A descriptor was received for the device Read more
source§

fn configure(&mut self, dev_addr: DeviceAddress) -> Option<u8>

The host is asking the driver to configure the device. Read more
source§

fn configured( + descriptor_type: u8, + data: &[u8] +)

A descriptor was received for the device Read more
source§

fn configure(&mut self, dev_addr: DeviceAddress) -> Option<u8>

The host is asking the driver to configure the device. Read more
source§

fn configured( &mut self, dev_addr: DeviceAddress, - value: u8, + value: u8, host: &mut UsbHost<B> -)

Informs the driver that a given configuration was selected for this device. Read more
source§

fn completed_control( +)

Informs the driver that a given configuration was selected for this device. Read more
source§

fn completed_control( &mut self, dev_addr: DeviceAddress, pipe_id: PipeId, - data: Option<&[u8]> -)

Called when a control transfer was completed on the given pipe Read more
source§

fn completed_in( + data: Option<&[u8]> +)

Called when a control transfer was completed on the given pipe Read more
source§

fn completed_in( &mut self, dev_addr: DeviceAddress, pipe_id: PipeId, - data: &[u8] -)

Called when data was received on the given IN pipe
source§

fn completed_out( + data: &[u8] +)

Called when data was received on the given IN pipe
source§

fn completed_out( &mut self, dev_addr: DeviceAddress, pipe_id: PipeId, - _data: &mut [u8] -)

Called when new data is needed for the given OUT pipe
source§

fn stall(&mut self, dev_addr: DeviceAddress)

Called when a device sends a STALL

Auto Trait Implementations§

§

impl<const MAX_HUBS: usize> RefUnwindSafe for HubDriver<MAX_HUBS>

§

impl<const MAX_HUBS: usize> Send for HubDriver<MAX_HUBS>

§

impl<const MAX_HUBS: usize> Sync for HubDriver<MAX_HUBS>

§

impl<const MAX_HUBS: usize> Unpin for HubDriver<MAX_HUBS>

§

impl<const MAX_HUBS: usize> UnwindSafe for HubDriver<MAX_HUBS>

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).

+ _data: &mut [u8] +)

Called when new data is needed for the given OUT pipe
source§

fn stall(&mut self, dev_addr: DeviceAddress)

Called when a device sends a STALL

Auto Trait Implementations§

§

impl<const MAX_HUBS: usize> RefUnwindSafe for HubDriver<MAX_HUBS>

§

impl<const MAX_HUBS: usize> Send for HubDriver<MAX_HUBS>

§

impl<const MAX_HUBS: usize> Sync for HubDriver<MAX_HUBS>

§

impl<const MAX_HUBS: usize> Unpin for HubDriver<MAX_HUBS>

§

impl<const MAX_HUBS: usize> UnwindSafe for HubDriver<MAX_HUBS>

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).

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 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 diff --git a/doc/usbh/driver/hub/struct.HubStatus.html b/doc/usbh/driver/hub/struct.HubStatus.html index 9e08ba6..04d4eba 100644 --- a/doc/usbh/driver/hub/struct.HubStatus.html +++ b/doc/usbh/driver/hub/struct.HubStatus.html @@ -1,11 +1,11 @@ -HubStatus in usbh::driver::hub - Rust

Struct usbh::driver::hub::HubStatus

source ·
pub struct HubStatus(_, _);

Trait Implementations§

source§

impl Clone for HubStatus

source§

fn clone(&self) -> HubStatus

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 Format for HubStatus

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl Copy for HubStatus

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).

+HubStatus in usbh::driver::hub - Rust

Struct usbh::driver::hub::HubStatus

source ·
pub struct HubStatus(_, _);

Trait Implementations§

source§

impl Clone for HubStatus

source§

fn clone(&self) -> HubStatus

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 Format for HubStatus

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl Copy for HubStatus

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).

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 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 diff --git a/doc/usbh/driver/hub/struct.PortStatus.html b/doc/usbh/driver/hub/struct.PortStatus.html index 251fa13..30ea29e 100644 --- a/doc/usbh/driver/hub/struct.PortStatus.html +++ b/doc/usbh/driver/hub/struct.PortStatus.html @@ -1,11 +1,11 @@ -PortStatus in usbh::driver::hub - Rust

Struct usbh::driver::hub::PortStatus

source ·
pub struct PortStatus { /* private fields */ }

Implementations§

source§

impl PortStatus

source

pub const CONNECTION: Self = _

source

pub const ENABLE: Self = _

source

pub const SUSPEND: Self = _

source

pub const OVER_CURRENT: Self = _

source

pub const RESET: Self = _

source

pub const POWER: Self = _

source

pub const LOW_SPEED: Self = _

source

pub const C_CONNECTION: Self = _

source

pub const C_ENABLE: Self = _

source

pub const C_SUSPEND: Self = _

source

pub const C_OVER_CURRENT: Self = _

source

pub const C_RESET: Self = _

source

pub const fn empty() -> Self

Returns an empty set of flags.

-
source

pub const fn all() -> Self

Returns the set containing all flags.

-
source

pub const fn bits(&self) -> u32

Returns the raw value of the flags currently stored.

-
source

pub const fn from_bits(bits: u32) -> Option<Self>

Convert from underlying bit representation, unless that +PortStatus in usbh::driver::hub - Rust

Struct usbh::driver::hub::PortStatus

source ·
pub struct PortStatus { /* private fields */ }

Implementations§

source§

impl PortStatus

source

pub const CONNECTION: Self = _

source

pub const ENABLE: Self = _

source

pub const SUSPEND: Self = _

source

pub const OVER_CURRENT: Self = _

source

pub const RESET: Self = _

source

pub const POWER: Self = _

source

pub const LOW_SPEED: Self = _

source

pub const C_CONNECTION: Self = _

source

pub const C_ENABLE: Self = _

source

pub const C_SUSPEND: Self = _

source

pub const C_OVER_CURRENT: Self = _

source

pub const C_RESET: Self = _

source

pub const fn empty() -> Self

Returns an empty set of flags.

+
source

pub const fn all() -> Self

Returns the set containing all flags.

+
source

pub const fn bits(&self) -> u32

Returns the raw value of the flags currently stored.

+
source

pub const fn from_bits(bits: u32) -> Option<Self>

Convert from underlying bit representation, unless that representation contains bits that do not correspond to a flag.

-
source

pub const fn from_bits_truncate(bits: u32) -> Self

Convert from underlying bit representation, dropping any bits +

source

pub const fn from_bits_truncate(bits: u32) -> Self

Convert from underlying bit representation, dropping any bits that do not correspond to flags.

-
source

pub const unsafe fn from_bits_unchecked(bits: u32) -> Self

Convert from underlying bit representation, preserving all +

source

pub const unsafe fn from_bits_unchecked(bits: u32) -> Self

Convert from underlying bit representation, preserving all bits (even those not corresponding to a defined flag).

Safety

The caller of the bitflags! macro can chose to allow or @@ -13,35 +13,35 @@

Safety

The caller of from_bits_unchecked() has to ensure that all bits correspond to a defined flag or that extra bits are valid for this bitflags type.

-
source

pub const fn is_empty(&self) -> bool

Returns true if no flags are currently stored.

-
source

pub const fn is_all(&self) -> bool

Returns true if all flags are currently set.

-
source

pub const fn intersects(&self, other: Self) -> bool

Returns true if there are flags common to both self and other.

-
source

pub const fn contains(&self, other: Self) -> bool

Returns true if all of the flags in other are contained within self.

-
source

pub fn insert(&mut self, other: Self)

Inserts the specified flags in-place.

-
source

pub fn remove(&mut self, other: Self)

Removes the specified flags in-place.

-
source

pub fn toggle(&mut self, other: Self)

Toggles the specified flags in-place.

-
source

pub fn set(&mut self, other: Self, value: bool)

Inserts or removes the specified flags depending on the passed value.

-
source

pub const fn intersection(self, other: Self) -> Self

Returns the intersection between the flags in self and +

source

pub const fn is_empty(&self) -> bool

Returns true if no flags are currently stored.

+
source

pub const fn is_all(&self) -> bool

Returns true if all flags are currently set.

+
source

pub const fn intersects(&self, other: Self) -> bool

Returns true if there are flags common to both self and other.

+
source

pub const fn contains(&self, other: Self) -> bool

Returns true if all of the flags in other are contained within self.

+
source

pub fn insert(&mut self, other: Self)

Inserts the specified flags in-place.

+
source

pub fn remove(&mut self, other: Self)

Removes the specified flags in-place.

+
source

pub fn toggle(&mut self, other: Self)

Toggles the specified flags in-place.

+
source

pub fn set(&mut self, other: Self, value: bool)

Inserts or removes the specified flags depending on the passed value.

+
source

pub const fn intersection(self, other: Self) -> Self

Returns the intersection between the flags in self and other.

Specifically, the returned set contains only the flags which are present in both self and other.

This is equivalent to using the & operator (e.g. ops::BitAnd), as in flags & other.

-
source

pub const fn union(self, other: Self) -> Self

Returns the union of between the flags in self and other.

+
source

pub const fn union(self, other: Self) -> Self

Returns the union of between the flags in self and other.

Specifically, the returned set contains all flags which are present in either self or other, including any which are present in both (see Self::symmetric_difference if that is undesirable).

This is equivalent to using the | operator (e.g. ops::BitOr), as in flags | other.

-
source

pub const fn difference(self, other: Self) -> Self

Returns the difference between the flags in self and other.

+
source

pub const fn difference(self, other: Self) -> Self

Returns the difference between the flags in self and other.

Specifically, the returned set contains all flags present in self, except for the ones present in other.

It is also conceptually equivalent to the “bit-clear” operation: flags & !other (and this syntax is also supported).

This is equivalent to using the - operator (e.g. ops::Sub), as in flags - other.

-
source

pub const fn symmetric_difference(self, other: Self) -> Self

Returns the symmetric difference between the flags +

source

pub const fn symmetric_difference(self, other: Self) -> Self

Returns the symmetric difference between the flags in self and other.

Specifically, the returned set contains the flags present which are present in self or other, but that are not present in @@ -49,39 +49,39 @@

Safety
one of the sets self and other.

This is equivalent to using the ^ operator (e.g. ops::BitXor), as in flags ^ other.

-
source

pub const fn complement(self) -> Self

Returns the complement of this set of flags.

+
source

pub const fn complement(self) -> Self

Returns the complement of this set of flags.

Specifically, the returned set contains all the flags which are not set in self, but which are allowed for this type.

Alternatively, it can be thought of as the set difference between Self::all() and self (e.g. Self::all() - self)

This is equivalent to using the ! operator (e.g. ops::Not), as in !flags.

-

Trait Implementations§

source§

impl Binary for PortStatus

source§

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

Formats the value using the given formatter.
source§

impl BitAnd<PortStatus> for PortStatus

source§

fn bitand(self, other: Self) -> Self

Returns the intersection between the two sets of flags.

-
§

type Output = PortStatus

The resulting type after applying the & operator.
source§

impl BitAndAssign<PortStatus> for PortStatus

source§

fn bitand_assign(&mut self, other: Self)

Disables all flags disabled in the set.

-
source§

impl BitOr<PortStatus> for PortStatus

source§

fn bitor(self, other: PortStatus) -> Self

Returns the union of the two sets of flags.

-
§

type Output = PortStatus

The resulting type after applying the | operator.
source§

impl BitOrAssign<PortStatus> for PortStatus

source§

fn bitor_assign(&mut self, other: Self)

Adds the set of flags.

-
source§

impl BitXor<PortStatus> for PortStatus

source§

fn bitxor(self, other: Self) -> Self

Returns the left flags, but with all the right flags toggled.

-
§

type Output = PortStatus

The resulting type after applying the ^ operator.
source§

impl BitXorAssign<PortStatus> for PortStatus

source§

fn bitxor_assign(&mut self, other: Self)

Toggles the set of flags.

-
source§

impl Clone for PortStatus

source§

fn clone(&self) -> PortStatus

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 PortStatus

source§

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

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

impl Extend<PortStatus> for PortStatus

source§

fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)

Extends a collection with the contents of an iterator. Read more
source§

fn extend_one(&mut self, item: A)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
source§

impl Format for PortStatus

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl FromIterator<PortStatus> for PortStatus

source§

fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self

Creates a value from an iterator. Read more
source§

impl Hash for PortStatus

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 LowerHex for PortStatus

source§

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

Formats the value using the given formatter.
source§

impl Not for PortStatus

source§

fn not(self) -> Self

Returns the complement of this set of flags.

-
§

type Output = PortStatus

The resulting type after applying the ! operator.
source§

impl Octal for PortStatus

source§

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

Formats the value using the given formatter.
source§

impl Ord for PortStatus

source§

fn cmp(&self, other: &PortStatus) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Selfwhere - Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Selfwhere - Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Selfwhere - Self: Sized + PartialOrd<Self>,

Restrict a value to a certain interval. Read more
source§

impl PartialEq<PortStatus> for PortStatus

source§

fn eq(&self, other: &PortStatus) -> 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 PartialOrd<PortStatus> for PortStatus

source§

fn partial_cmp(&self, other: &PortStatus) -> 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 <= -operator. 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 >= -operator. Read more
source§

impl Sub<PortStatus> for PortStatus

source§

fn sub(self, other: Self) -> Self

Returns the set difference of the two sets of flags.

-
§

type Output = PortStatus

The resulting type after applying the - operator.
source§

impl SubAssign<PortStatus> for PortStatus

source§

fn sub_assign(&mut self, other: Self)

Disables all flags enabled in the set.

-
source§

impl UpperHex for PortStatus

source§

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

Formats the value using the given formatter.
source§

impl Copy for PortStatus

source§

impl Eq for PortStatus

source§

impl StructuralEq for PortStatus

source§

impl StructuralPartialEq for PortStatus

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).

+

Trait Implementations§

source§

impl Binary for PortStatus

source§

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

Formats the value using the given formatter.
source§

impl BitAnd<PortStatus> for PortStatus

source§

fn bitand(self, other: Self) -> Self

Returns the intersection between the two sets of flags.

+
§

type Output = PortStatus

The resulting type after applying the & operator.
source§

impl BitAndAssign<PortStatus> for PortStatus

source§

fn bitand_assign(&mut self, other: Self)

Disables all flags disabled in the set.

+
source§

impl BitOr<PortStatus> for PortStatus

source§

fn bitor(self, other: PortStatus) -> Self

Returns the union of the two sets of flags.

+
§

type Output = PortStatus

The resulting type after applying the | operator.
source§

impl BitOrAssign<PortStatus> for PortStatus

source§

fn bitor_assign(&mut self, other: Self)

Adds the set of flags.

+
source§

impl BitXor<PortStatus> for PortStatus

source§

fn bitxor(self, other: Self) -> Self

Returns the left flags, but with all the right flags toggled.

+
§

type Output = PortStatus

The resulting type after applying the ^ operator.
source§

impl BitXorAssign<PortStatus> for PortStatus

source§

fn bitxor_assign(&mut self, other: Self)

Toggles the set of flags.

+
source§

impl Clone for PortStatus

source§

fn clone(&self) -> PortStatus

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 PortStatus

source§

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

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

impl Extend<PortStatus> for PortStatus

source§

fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)

Extends a collection with the contents of an iterator. Read more
source§

fn extend_one(&mut self, item: A)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
source§

impl Format for PortStatus

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl FromIterator<PortStatus> for PortStatus

source§

fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self

Creates a value from an iterator. Read more
source§

impl Hash for PortStatus

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 LowerHex for PortStatus

source§

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

Formats the value using the given formatter.
source§

impl Not for PortStatus

source§

fn not(self) -> Self

Returns the complement of this set of flags.

+
§

type Output = PortStatus

The resulting type after applying the ! operator.
source§

impl Octal for PortStatus

source§

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

Formats the value using the given formatter.
source§

impl Ord for PortStatus

source§

fn cmp(&self, other: &PortStatus) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Selfwhere + Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Selfwhere + Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd<Self>,

Restrict a value to a certain interval. Read more
source§

impl PartialEq<PortStatus> for PortStatus

source§

fn eq(&self, other: &PortStatus) -> 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 PartialOrd<PortStatus> for PortStatus

source§

fn partial_cmp(&self, other: &PortStatus) -> 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 <= +operator. 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 >= +operator. Read more
source§

impl Sub<PortStatus> for PortStatus

source§

fn sub(self, other: Self) -> Self

Returns the set difference of the two sets of flags.

+
§

type Output = PortStatus

The resulting type after applying the - operator.
source§

impl SubAssign<PortStatus> for PortStatus

source§

fn sub_assign(&mut self, other: Self)

Disables all flags enabled in the set.

+
source§

impl UpperHex for PortStatus

source§

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

Formats the value using the given formatter.
source§

impl Copy for PortStatus

source§

impl Eq for PortStatus

source§

impl StructuralEq for PortStatus

source§

impl StructuralPartialEq for PortStatus

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).

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 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 diff --git a/doc/usbh/driver/index.html b/doc/usbh/driver/index.html index 2f4661c..e6d5e97 100644 --- a/doc/usbh/driver/index.html +++ b/doc/usbh/driver/index.html @@ -1,4 +1,4 @@ -usbh::driver - Rust

Module usbh::driver

source ·
Expand description

Interface for implementing drivers

+usbh::driver - Rust

Module usbh::driver

source ·
Expand description

Interface for implementing drivers

Drivers are instantiated by application code and passed to the UsbHost::poll function.

The methods defined in this trait are then called by by the UsbHost at the appropriate times.

All of these methods are called on all of the drivers (with the exception fo the configure method).

diff --git a/doc/usbh/driver/kbd/enum.KbdError.html b/doc/usbh/driver/kbd/enum.KbdError.html index 97e42ed..22230ae 100644 --- a/doc/usbh/driver/kbd/enum.KbdError.html +++ b/doc/usbh/driver/kbd/enum.KbdError.html @@ -1,18 +1,18 @@ -KbdError in usbh::driver::kbd - Rust

Enum usbh::driver::kbd::KbdError

source ·
pub enum KbdError {
+KbdError in usbh::driver::kbd - Rust

Enum usbh::driver::kbd::KbdError

source ·
pub enum KbdError {
     ControlError(ControlError),
     UnknownDevice,
 }
Expand description

Error type for interactions with the driver

Variants§

§

ControlError(ControlError)

Error initiating control transfer

§

UnknownDevice

The given DeviceAddress is not known.

This can happen if the device was removed meanwhile.

-

Trait Implementations§

source§

impl Clone for KbdError

source§

fn clone(&self) -> KbdError

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<ControlError> for KbdError

source§

fn from(e: ControlError) -> Self

Converts to this type from the input type.
source§

impl Copy for KbdError

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).

+

Trait Implementations§

source§

impl Clone for KbdError

source§

fn clone(&self) -> KbdError

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<ControlError> for KbdError

source§

fn from(e: ControlError) -> Self

Converts to this type from the input type.
source§

impl Copy for KbdError

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).

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 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 diff --git a/doc/usbh/driver/kbd/enum.KbdEvent.html b/doc/usbh/driver/kbd/enum.KbdEvent.html index 0555aae..e285693 100644 --- a/doc/usbh/driver/kbd/enum.KbdEvent.html +++ b/doc/usbh/driver/kbd/enum.KbdEvent.html @@ -1,4 +1,4 @@ -KbdEvent in usbh::driver::kbd - Rust

Enum usbh::driver::kbd::KbdEvent

source ·
pub enum KbdEvent {
+KbdEvent in usbh::driver::kbd - Rust

Enum usbh::driver::kbd::KbdEvent

source ·
pub enum KbdEvent {
     DeviceAdded(DeviceAddress),
     DeviceRemoved(DeviceAddress),
     InputChanged(DeviceAddress, InputReport),
@@ -10,14 +10,14 @@
 

Use the InputReport object to find out more.

§

ControlComplete(DeviceAddress)

A control transfer has completed.

Control transfers are initiated by the KbdDriver::set_idle and KbdDriver::set_led methods.

-

Trait Implementations§

source§

impl Clone for KbdEvent

source§

fn clone(&self) -> KbdEvent

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 Format for KbdEvent

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl Copy for KbdEvent

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).

+

Trait Implementations§

source§

impl Clone for KbdEvent

source§

fn clone(&self) -> KbdEvent

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 Format for KbdEvent

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl Copy for KbdEvent

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).

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 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 diff --git a/doc/usbh/driver/kbd/enum.KbdLed.html b/doc/usbh/driver/kbd/enum.KbdLed.html index 873935f..45a6d72 100644 --- a/doc/usbh/driver/kbd/enum.KbdLed.html +++ b/doc/usbh/driver/kbd/enum.KbdLed.html @@ -1,18 +1,18 @@ -KbdLed in usbh::driver::kbd - Rust

Enum usbh::driver::kbd::KbdLed

source ·
#[repr(u8)]
pub enum KbdLed { +KbdLed in usbh::driver::kbd - Rust

Enum usbh::driver::kbd::KbdLed

source ·
#[repr(u8)]
pub enum KbdLed { NumLock, CapsLock, ScrollLock, Compose, Kana, }
Expand description

Identifies the five LEDs that a boot keyboard can support

-

Variants§

§

NumLock

§

CapsLock

§

ScrollLock

§

Compose

§

Kana

Trait Implementations§

source§

impl Clone for KbdLed

source§

fn clone(&self) -> KbdLed

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 KbdLed

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§

§

NumLock

§

CapsLock

§

ScrollLock

§

Compose

§

Kana

Trait Implementations§

source§

impl Clone for KbdLed

source§

fn clone(&self) -> KbdLed

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 KbdLed

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).

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 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 diff --git a/doc/usbh/driver/kbd/index.html b/doc/usbh/driver/kbd/index.html index c92912b..8dba55d 100644 --- a/doc/usbh/driver/kbd/index.html +++ b/doc/usbh/driver/kbd/index.html @@ -1 +1 @@ -usbh::driver::kbd - Rust

Module usbh::driver::kbd

source ·

Structs

Enums

  • Error type for interactions with the driver
  • Events related to attached keyboard(s)
  • Identifies the five LEDs that a boot keyboard can support
\ No newline at end of file +usbh::driver::kbd - Rust

Module usbh::driver::kbd

source ·

Structs

Enums

  • Error type for interactions with the driver
  • Events related to attached keyboard(s)
  • Identifies the five LEDs that a boot keyboard can support
\ No newline at end of file diff --git a/doc/usbh/driver/kbd/struct.InputReport.html b/doc/usbh/driver/kbd/struct.InputReport.html index 2bf519b..78848ef 100644 --- a/doc/usbh/driver/kbd/struct.InputReport.html +++ b/doc/usbh/driver/kbd/struct.InputReport.html @@ -1,18 +1,18 @@ -InputReport in usbh::driver::kbd - Rust

Struct usbh::driver::kbd::InputReport

source ·
#[repr(packed)]
pub struct InputReport { +InputReport in usbh::driver::kbd - Rust

Struct usbh::driver::kbd::InputReport

source ·
#[repr(packed)]
pub struct InputReport { pub modifier_status: ModifierStatus, - pub keypress: [Option<NonZeroU8>; 6], + pub keypress: [Option<NonZeroU8>; 6], /* private fields */ }
Expand description

Represents an input report, received from a keyboard

The input report describes which keys are currently pressed.

Fields§

§modifier_status: ModifierStatus

Status of modifier keys

-
§keypress: [Option<NonZeroU8>; 6]

Implementations§

source§

impl InputReport

source

pub fn pressed_keys(&self) -> impl Iterator<Item = u8> + '_

Trait Implementations§

source§

impl Clone for InputReport

source§

fn clone(&self) -> InputReport

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 Format for InputReport

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl<'a> TryFrom<&'a [u8]> for &'a InputReport

§

type Error = ()

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

fn try_from(value: &'a [u8]) -> Result<Self, Self::Error>

Performs the conversion.
source§

impl Copy for InputReport

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).

+
§keypress: [Option<NonZeroU8>; 6]

Implementations§

source§

impl InputReport

source

pub fn pressed_keys(&self) -> impl Iterator<Item = u8> + '_

Trait Implementations§

source§

impl Clone for InputReport

source§

fn clone(&self) -> InputReport

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 Format for InputReport

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl<'a> TryFrom<&'a [u8]> for &'a InputReport

§

type Error = ()

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

fn try_from(value: &'a [u8]) -> Result<Self, Self::Error>

Performs the conversion.
source§

impl Copy for InputReport

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).

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 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 diff --git a/doc/usbh/driver/kbd/struct.KbdDriver.html b/doc/usbh/driver/kbd/struct.KbdDriver.html index 497ac2b..b8d253b 100644 --- a/doc/usbh/driver/kbd/struct.KbdDriver.html +++ b/doc/usbh/driver/kbd/struct.KbdDriver.html @@ -1,73 +1,73 @@ -KbdDriver in usbh::driver::kbd - Rust

Struct usbh::driver::kbd::KbdDriver

source ·
pub struct KbdDriver<const MAX_DEVICES: usize = 8> { /* private fields */ }
Expand description

Driver for boot keyboards

+KbdDriver in usbh::driver::kbd - Rust

Struct usbh::driver::kbd::KbdDriver

source ·
pub struct KbdDriver<const MAX_DEVICES: usize = 8> { /* private fields */ }
Expand description

Driver for boot keyboards

By default, up to 8 connected keyboards can be handled. Events are reported for each device separately.

To increase (or decrease) the number of devices that can be handled, adjust the MAX_DEVICES parameter.

Note: the number of devices that can be handled also depends on UsbHost which limits the number of pipes that can be created. Each connected keyboard requires two pipes: a control pipe and an interrupt pipe.

-

Implementations§

source§

impl<const MAX_DEVICES: usize> KbdDriver<MAX_DEVICES>

source

pub fn new() -> Self

source

pub fn take_event(&mut self) -> Option<KbdEvent>

Returns the last keyboard event that occurred (if any) and clears it.

+

Implementations§

source§

impl<const MAX_DEVICES: usize> KbdDriver<MAX_DEVICES>

source

pub fn new() -> Self

source

pub fn take_event(&mut self) -> Option<KbdEvent>

Returns the last keyboard event that occurred (if any) and clears it.

This method should be called directly after calling usb_host.poll(...).

Otherwise events may be lost.

For the meaning of events, please refer to the KbdEvent documentation.

-
source

pub fn set_idle<B: HostBus>( +

source

pub fn set_idle<B: HostBus>( &mut self, dev_addr: DeviceAddress, - latency: u8, + latency: u8, host: &mut UsbHost<B> -) -> Result<(), KbdError>

Set interval for idle reports

+) -> Result<(), KbdError>

Set interval for idle reports

If an idle interval is set, the keyboard will send out the current input report (i.e. pressed keys) regularly, even when no change to the pressed keys occurs.

The interval is expressed as a duration value, which is interpreted as a multiple of 4 ms.

Setting the duration to 0 disables idle reports. If they are disabled, input reports are only received when a key is pressed or released.

The USB HID specification recommends a default interval of 500ms for keyboards (duration value: 125).

-
source

pub fn set_led<B: HostBus>( +

source

pub fn set_led<B: HostBus>( &mut self, dev_addr: DeviceAddress, led: KbdLed, - on: bool, + on: bool, host: &mut UsbHost<B> -) -> Result<(), KbdError>

Set the given KbdLed to the specified state.

+) -> Result<(), KbdError>

Set the given KbdLed to the specified state.

The driver keeps track of the current output report (i.e. LED state basically) for each of the connected devices. Initially it is 0 (i.e. all LEDs are off).

This method updates one of the bits in the output report (identified by KbdLed) and sents the updated report to the device.

-

Trait Implementations§

Trait Implementations§

source§

impl<B: HostBus> Driver<B> for KbdDriver

source§

fn attached( &mut self, device_address: DeviceAddress, _connection_speed: ConnectionSpeed -)

New device was attached, and got assigned the given address. Read more
source§

fn detached(&mut self, device_address: DeviceAddress)

The device with the given address was detached. Read more
source§

fn descriptor( +)

New device was attached, and got assigned the given address. Read more
source§

fn detached(&mut self, device_address: DeviceAddress)

The device with the given address was detached. Read more
source§

fn descriptor( &mut self, device_address: DeviceAddress, - descriptor_type: u8, - data: &[u8] -)

A descriptor was received for the device Read more
source§

fn configure(&mut self, device_address: DeviceAddress) -> Option<u8>

The host is asking the driver to configure the device. Read more
source§

fn configured( + descriptor_type: u8, + data: &[u8] +)

A descriptor was received for the device Read more
source§

fn configure(&mut self, device_address: DeviceAddress) -> Option<u8>

The host is asking the driver to configure the device. Read more
source§

fn configured( &mut self, device_address: DeviceAddress, - value: u8, + value: u8, host: &mut UsbHost<B> -)

Informs the driver that a given configuration was selected for this device. Read more
source§

fn completed_control( +)

Informs the driver that a given configuration was selected for this device. Read more
source§

fn completed_control( &mut self, dev_addr: DeviceAddress, _pipe_id: PipeId, - _data: Option<&[u8]> -)

Called when a control transfer was completed on the given pipe Read more
source§

fn completed_in( + _data: Option<&[u8]> +)

Called when a control transfer was completed on the given pipe Read more
source§

fn completed_in( &mut self, device_address: DeviceAddress, pipe: PipeId, - data: &[u8] -)

Called when data was received on the given IN pipe
source§

fn completed_out( + data: &[u8] +)

Called when data was received on the given IN pipe
source§

fn completed_out( &mut self, _device_address: DeviceAddress, _pipe_id: PipeId, - _data: &mut [u8] -)

Called when new data is needed for the given OUT pipe
source§

fn stall(&mut self, _dev_addr: DeviceAddress)

Called when a device sends a STALL

Auto Trait Implementations§

§

impl<const MAX_DEVICES: usize> RefUnwindSafe for KbdDriver<MAX_DEVICES>

§

impl<const MAX_DEVICES: usize> Send for KbdDriver<MAX_DEVICES>

§

impl<const MAX_DEVICES: usize> Sync for KbdDriver<MAX_DEVICES>

§

impl<const MAX_DEVICES: usize> Unpin for KbdDriver<MAX_DEVICES>

§

impl<const MAX_DEVICES: usize> UnwindSafe for KbdDriver<MAX_DEVICES>

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).

+ _data: &mut [u8] +)
Called when new data is needed for the given OUT pipe
source§

fn stall(&mut self, _dev_addr: DeviceAddress)

Called when a device sends a STALL

Auto Trait Implementations§

§

impl<const MAX_DEVICES: usize> RefUnwindSafe for KbdDriver<MAX_DEVICES>

§

impl<const MAX_DEVICES: usize> Send for KbdDriver<MAX_DEVICES>

§

impl<const MAX_DEVICES: usize> Sync for KbdDriver<MAX_DEVICES>

§

impl<const MAX_DEVICES: usize> Unpin for KbdDriver<MAX_DEVICES>

§

impl<const MAX_DEVICES: usize> UnwindSafe for KbdDriver<MAX_DEVICES>

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).

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 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 diff --git a/doc/usbh/driver/kbd/struct.ModifierStatus.html b/doc/usbh/driver/kbd/struct.ModifierStatus.html index ea4a5b7..0fd6334 100644 --- a/doc/usbh/driver/kbd/struct.ModifierStatus.html +++ b/doc/usbh/driver/kbd/struct.ModifierStatus.html @@ -1,21 +1,21 @@ -ModifierStatus in usbh::driver::kbd - Rust

Struct usbh::driver::kbd::ModifierStatus

source ·
pub struct ModifierStatus(_);

Implementations§

source§

impl ModifierStatus

source

pub fn left_ctrl(&self) -> bool

Is left Ctrl pressed?

-
source

pub fn left_shift(&self) -> bool

Is left Shift pressed?

-
source

pub fn left_alt(&self) -> bool

Is left Alt pressed?

-
source

pub fn left_gui(&self) -> bool

Is left Gui pressed?

+ModifierStatus in usbh::driver::kbd - Rust

Struct usbh::driver::kbd::ModifierStatus

source ·
pub struct ModifierStatus(_);

Implementations§

source§

impl ModifierStatus

source

pub fn left_ctrl(&self) -> bool

Is left Ctrl pressed?

+
source

pub fn left_shift(&self) -> bool

Is left Shift pressed?

+
source

pub fn left_alt(&self) -> bool

Is left Alt pressed?

+
source

pub fn left_gui(&self) -> bool

Is left Gui pressed?

The Gui button is also known as the Super or Windows key.

-
source

pub fn right_ctrl(&self) -> bool

Is right Ctrl pressed?

-
source

pub fn right_shift(&self) -> bool

Is right Shift pressed?

-
source

pub fn right_alt(&self) -> bool

Is right Alt pressed?

-
source

pub fn right_gui(&self) -> bool

Is right Gui pressed?

+
source

pub fn right_ctrl(&self) -> bool

Is right Ctrl pressed?

+
source

pub fn right_shift(&self) -> bool

Is right Shift pressed?

+
source

pub fn right_alt(&self) -> bool

Is right Alt pressed?

+
source

pub fn right_gui(&self) -> bool

Is right Gui pressed?

The Gui button is also known as the Super or Windows key.

-

Trait Implementations§

source§

impl Clone for ModifierStatus

source§

fn clone(&self) -> ModifierStatus

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 ModifierStatus

source§

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

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

impl Format for ModifierStatus

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl Copy for ModifierStatus

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).

+

Trait Implementations§

source§

impl Clone for ModifierStatus

source§

fn clone(&self) -> ModifierStatus

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 ModifierStatus

source§

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

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

impl Format for ModifierStatus

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl Copy for ModifierStatus

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).

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 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 diff --git a/doc/usbh/driver/log/index.html b/doc/usbh/driver/log/index.html index 5af0df7..40da845 100644 --- a/doc/usbh/driver/log/index.html +++ b/doc/usbh/driver/log/index.html @@ -1 +1 @@ -usbh::driver::log - Rust

Module usbh::driver::log

source ·

Structs

\ No newline at end of file +usbh::driver::log - Rust

Module usbh::driver::log

source ·

Structs

\ No newline at end of file diff --git a/doc/usbh/driver/log/struct.EventMask.html b/doc/usbh/driver/log/struct.EventMask.html index ce1b041..81fdbf5 100644 --- a/doc/usbh/driver/log/struct.EventMask.html +++ b/doc/usbh/driver/log/struct.EventMask.html @@ -1,13 +1,13 @@ -EventMask in usbh::driver::log - Rust

Struct usbh::driver::log::EventMask

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

Used to select which events are logged by the LogDriver

+EventMask in usbh::driver::log - Rust

Struct usbh::driver::log::EventMask

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

Used to select which events are logged by the LogDriver

Each of the flags corresponds to one of the methods in the Driver interface.

-

Implementations§

source§

impl EventMask

source

pub const ATTACHED: Self = _

source

pub const DETACHED: Self = _

source

pub const DESCRIPTOR: Self = _

source

pub const CONFIGURE: Self = _

source

pub const CONFIGURED: Self = _

source

pub const COMPLETED_CONTROL: Self = _

source

pub const COMPLETED_IN: Self = _

source

pub const COMPLETED_OUT: Self = _

source

pub const fn empty() -> Self

Returns an empty set of flags.

-
source

pub const fn all() -> Self

Returns the set containing all flags.

-
source

pub const fn bits(&self) -> u8

Returns the raw value of the flags currently stored.

-
source

pub const fn from_bits(bits: u8) -> Option<Self>

Convert from underlying bit representation, unless that +

Implementations§

source§

impl EventMask

source

pub const ATTACHED: Self = _

source

pub const DETACHED: Self = _

source

pub const DESCRIPTOR: Self = _

source

pub const CONFIGURE: Self = _

source

pub const CONFIGURED: Self = _

source

pub const COMPLETED_CONTROL: Self = _

source

pub const COMPLETED_IN: Self = _

source

pub const COMPLETED_OUT: Self = _

source

pub const fn empty() -> Self

Returns an empty set of flags.

+
source

pub const fn all() -> Self

Returns the set containing all flags.

+
source

pub const fn bits(&self) -> u8

Returns the raw value of the flags currently stored.

+
source

pub const fn from_bits(bits: u8) -> Option<Self>

Convert from underlying bit representation, unless that representation contains bits that do not correspond to a flag.

-
source

pub const fn from_bits_truncate(bits: u8) -> Self

Convert from underlying bit representation, dropping any bits +

source

pub const fn from_bits_truncate(bits: u8) -> Self

Convert from underlying bit representation, dropping any bits that do not correspond to flags.

-
source

pub const unsafe fn from_bits_unchecked(bits: u8) -> Self

Convert from underlying bit representation, preserving all +

source

pub const unsafe fn from_bits_unchecked(bits: u8) -> Self

Convert from underlying bit representation, preserving all bits (even those not corresponding to a defined flag).

Safety

The caller of the bitflags! macro can chose to allow or @@ -15,35 +15,35 @@

Safety

The caller of from_bits_unchecked() has to ensure that all bits correspond to a defined flag or that extra bits are valid for this bitflags type.

-
source

pub const fn is_empty(&self) -> bool

Returns true if no flags are currently stored.

-
source

pub const fn is_all(&self) -> bool

Returns true if all flags are currently set.

-
source

pub const fn intersects(&self, other: Self) -> bool

Returns true if there are flags common to both self and other.

-
source

pub const fn contains(&self, other: Self) -> bool

Returns true if all of the flags in other are contained within self.

-
source

pub fn insert(&mut self, other: Self)

Inserts the specified flags in-place.

-
source

pub fn remove(&mut self, other: Self)

Removes the specified flags in-place.

-
source

pub fn toggle(&mut self, other: Self)

Toggles the specified flags in-place.

-
source

pub fn set(&mut self, other: Self, value: bool)

Inserts or removes the specified flags depending on the passed value.

-
source

pub const fn intersection(self, other: Self) -> Self

Returns the intersection between the flags in self and +

source

pub const fn is_empty(&self) -> bool

Returns true if no flags are currently stored.

+
source

pub const fn is_all(&self) -> bool

Returns true if all flags are currently set.

+
source

pub const fn intersects(&self, other: Self) -> bool

Returns true if there are flags common to both self and other.

+
source

pub const fn contains(&self, other: Self) -> bool

Returns true if all of the flags in other are contained within self.

+
source

pub fn insert(&mut self, other: Self)

Inserts the specified flags in-place.

+
source

pub fn remove(&mut self, other: Self)

Removes the specified flags in-place.

+
source

pub fn toggle(&mut self, other: Self)

Toggles the specified flags in-place.

+
source

pub fn set(&mut self, other: Self, value: bool)

Inserts or removes the specified flags depending on the passed value.

+
source

pub const fn intersection(self, other: Self) -> Self

Returns the intersection between the flags in self and other.

Specifically, the returned set contains only the flags which are present in both self and other.

This is equivalent to using the & operator (e.g. ops::BitAnd), as in flags & other.

-
source

pub const fn union(self, other: Self) -> Self

Returns the union of between the flags in self and other.

+
source

pub const fn union(self, other: Self) -> Self

Returns the union of between the flags in self and other.

Specifically, the returned set contains all flags which are present in either self or other, including any which are present in both (see Self::symmetric_difference if that is undesirable).

This is equivalent to using the | operator (e.g. ops::BitOr), as in flags | other.

-
source

pub const fn difference(self, other: Self) -> Self

Returns the difference between the flags in self and other.

+
source

pub const fn difference(self, other: Self) -> Self

Returns the difference between the flags in self and other.

Specifically, the returned set contains all flags present in self, except for the ones present in other.

It is also conceptually equivalent to the “bit-clear” operation: flags & !other (and this syntax is also supported).

This is equivalent to using the - operator (e.g. ops::Sub), as in flags - other.

-
source

pub const fn symmetric_difference(self, other: Self) -> Self

Returns the symmetric difference between the flags +

source

pub const fn symmetric_difference(self, other: Self) -> Self

Returns the symmetric difference between the flags in self and other.

Specifically, the returned set contains the flags present which are present in self or other, but that are not present in @@ -51,39 +51,39 @@

Safety
one of the sets self and other.

This is equivalent to using the ^ operator (e.g. ops::BitXor), as in flags ^ other.

-
source

pub const fn complement(self) -> Self

Returns the complement of this set of flags.

+
source

pub const fn complement(self) -> Self

Returns the complement of this set of flags.

Specifically, the returned set contains all the flags which are not set in self, but which are allowed for this type.

Alternatively, it can be thought of as the set difference between Self::all() and self (e.g. Self::all() - self)

This is equivalent to using the ! operator (e.g. ops::Not), as in !flags.

-

Trait Implementations§

source§

impl Binary for EventMask

source§

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

Formats the value using the given formatter.
source§

impl BitAnd<EventMask> for EventMask

source§

fn bitand(self, other: Self) -> Self

Returns the intersection between the two sets of flags.

-
§

type Output = EventMask

The resulting type after applying the & operator.
source§

impl BitAndAssign<EventMask> for EventMask

source§

fn bitand_assign(&mut self, other: Self)

Disables all flags disabled in the set.

-
source§

impl BitOr<EventMask> for EventMask

source§

fn bitor(self, other: EventMask) -> Self

Returns the union of the two sets of flags.

-
§

type Output = EventMask

The resulting type after applying the | operator.
source§

impl BitOrAssign<EventMask> for EventMask

source§

fn bitor_assign(&mut self, other: Self)

Adds the set of flags.

-
source§

impl BitXor<EventMask> for EventMask

source§

fn bitxor(self, other: Self) -> Self

Returns the left flags, but with all the right flags toggled.

-
§

type Output = EventMask

The resulting type after applying the ^ operator.
source§

impl BitXorAssign<EventMask> for EventMask

source§

fn bitxor_assign(&mut self, other: Self)

Toggles the set of flags.

-
source§

impl Clone for EventMask

source§

fn clone(&self) -> EventMask

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 EventMask

source§

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

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

impl Extend<EventMask> for EventMask

source§

fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)

Extends a collection with the contents of an iterator. Read more
source§

fn extend_one(&mut self, item: A)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
source§

impl Format for EventMask

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl FromIterator<EventMask> for EventMask

source§

fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self

Creates a value from an iterator. Read more
source§

impl Hash for EventMask

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 LowerHex for EventMask

source§

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

Formats the value using the given formatter.
source§

impl Not for EventMask

source§

fn not(self) -> Self

Returns the complement of this set of flags.

-
§

type Output = EventMask

The resulting type after applying the ! operator.
source§

impl Octal for EventMask

source§

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

Formats the value using the given formatter.
source§

impl Ord for EventMask

source§

fn cmp(&self, other: &EventMask) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Selfwhere - Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Selfwhere - Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Selfwhere - Self: Sized + PartialOrd<Self>,

Restrict a value to a certain interval. Read more
source§

impl PartialEq<EventMask> for EventMask

source§

fn eq(&self, other: &EventMask) -> 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 PartialOrd<EventMask> for EventMask

source§

fn partial_cmp(&self, other: &EventMask) -> 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 <= -operator. 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 >= -operator. Read more
source§

impl Sub<EventMask> for EventMask

source§

fn sub(self, other: Self) -> Self

Returns the set difference of the two sets of flags.

-
§

type Output = EventMask

The resulting type after applying the - operator.
source§

impl SubAssign<EventMask> for EventMask

source§

fn sub_assign(&mut self, other: Self)

Disables all flags enabled in the set.

-
source§

impl UpperHex for EventMask

source§

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

Formats the value using the given formatter.
source§

impl Copy for EventMask

source§

impl Eq for EventMask

source§

impl StructuralEq for EventMask

source§

impl StructuralPartialEq for EventMask

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).

+

Trait Implementations§

source§

impl Binary for EventMask

source§

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

Formats the value using the given formatter.
source§

impl BitAnd<EventMask> for EventMask

source§

fn bitand(self, other: Self) -> Self

Returns the intersection between the two sets of flags.

+
§

type Output = EventMask

The resulting type after applying the & operator.
source§

impl BitAndAssign<EventMask> for EventMask

source§

fn bitand_assign(&mut self, other: Self)

Disables all flags disabled in the set.

+
source§

impl BitOr<EventMask> for EventMask

source§

fn bitor(self, other: EventMask) -> Self

Returns the union of the two sets of flags.

+
§

type Output = EventMask

The resulting type after applying the | operator.
source§

impl BitOrAssign<EventMask> for EventMask

source§

fn bitor_assign(&mut self, other: Self)

Adds the set of flags.

+
source§

impl BitXor<EventMask> for EventMask

source§

fn bitxor(self, other: Self) -> Self

Returns the left flags, but with all the right flags toggled.

+
§

type Output = EventMask

The resulting type after applying the ^ operator.
source§

impl BitXorAssign<EventMask> for EventMask

source§

fn bitxor_assign(&mut self, other: Self)

Toggles the set of flags.

+
source§

impl Clone for EventMask

source§

fn clone(&self) -> EventMask

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 EventMask

source§

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

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

impl Extend<EventMask> for EventMask

source§

fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)

Extends a collection with the contents of an iterator. Read more
source§

fn extend_one(&mut self, item: A)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
source§

impl Format for EventMask

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl FromIterator<EventMask> for EventMask

source§

fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self

Creates a value from an iterator. Read more
source§

impl Hash for EventMask

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 LowerHex for EventMask

source§

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

Formats the value using the given formatter.
source§

impl Not for EventMask

source§

fn not(self) -> Self

Returns the complement of this set of flags.

+
§

type Output = EventMask

The resulting type after applying the ! operator.
source§

impl Octal for EventMask

source§

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

Formats the value using the given formatter.
source§

impl Ord for EventMask

source§

fn cmp(&self, other: &EventMask) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Selfwhere + Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Selfwhere + Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Selfwhere + Self: Sized + PartialOrd<Self>,

Restrict a value to a certain interval. Read more
source§

impl PartialEq<EventMask> for EventMask

source§

fn eq(&self, other: &EventMask) -> 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 PartialOrd<EventMask> for EventMask

source§

fn partial_cmp(&self, other: &EventMask) -> 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 <= +operator. 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 >= +operator. Read more
source§

impl Sub<EventMask> for EventMask

source§

fn sub(self, other: Self) -> Self

Returns the set difference of the two sets of flags.

+
§

type Output = EventMask

The resulting type after applying the - operator.
source§

impl SubAssign<EventMask> for EventMask

source§

fn sub_assign(&mut self, other: Self)

Disables all flags enabled in the set.

+
source§

impl UpperHex for EventMask

source§

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

Formats the value using the given formatter.
source§

impl Copy for EventMask

source§

impl Eq for EventMask

source§

impl StructuralEq for EventMask

source§

impl StructuralPartialEq for EventMask

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).

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 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 diff --git a/doc/usbh/driver/log/struct.LogDriver.html b/doc/usbh/driver/log/struct.LogDriver.html index 557bb9a..b013329 100644 --- a/doc/usbh/driver/log/struct.LogDriver.html +++ b/doc/usbh/driver/log/struct.LogDriver.html @@ -1,41 +1,41 @@ -LogDriver in usbh::driver::log - Rust

Struct usbh::driver::log::LogDriver

source ·
pub struct LogDriver(_);
Expand description

A Driver which logs various events

-

Implementations§

source§

impl LogDriver

source

pub fn new(event_mask: EventMask) -> Self

Trait Implementations§

source§

impl<B: HostBus> Driver<B> for LogDriver

source§

fn attached( +LogDriver in usbh::driver::log - Rust

Struct usbh::driver::log::LogDriver

source ·
pub struct LogDriver(_);
Expand description

A Driver which logs various events

+

Implementations§

source§

impl LogDriver

source

pub fn new(event_mask: EventMask) -> Self

Trait Implementations§

source§

impl<B: HostBus> Driver<B> for LogDriver

source§

fn attached( &mut self, dev_addr: DeviceAddress, connection_speed: ConnectionSpeed -)

New device was attached, and got assigned the given address. Read more
source§

fn detached(&mut self, dev_addr: DeviceAddress)

The device with the given address was detached. Read more
source§

fn descriptor( +)

New device was attached, and got assigned the given address. Read more
source§

fn detached(&mut self, dev_addr: DeviceAddress)

The device with the given address was detached. Read more
source§

fn descriptor( &mut self, dev_addr: DeviceAddress, - descriptor_type: u8, - data: &[u8] -)

A descriptor was received for the device Read more
source§

fn configure(&mut self, dev_addr: DeviceAddress) -> Option<u8>

The host is asking the driver to configure the device. Read more
source§

fn configured( + descriptor_type: u8, + data: &[u8] +)

A descriptor was received for the device Read more
source§

fn configure(&mut self, dev_addr: DeviceAddress) -> Option<u8>

The host is asking the driver to configure the device. Read more
source§

fn configured( &mut self, dev_addr: DeviceAddress, - value: u8, + value: u8, _host: &mut UsbHost<B> -)

Informs the driver that a given configuration was selected for this device. Read more
source§

fn completed_control( +)

Informs the driver that a given configuration was selected for this device. Read more
source§

fn completed_control( &mut self, dev_addr: DeviceAddress, pipe_id: PipeId, - data: Option<&[u8]> -)

Called when a control transfer was completed on the given pipe Read more
source§

fn completed_in( + data: Option<&[u8]> +)

Called when a control transfer was completed on the given pipe Read more
source§

fn completed_in( &mut self, dev_addr: DeviceAddress, pipe_id: PipeId, - _data: &[u8] -)

Called when data was received on the given IN pipe
source§

fn completed_out( + _data: &[u8] +)

Called when data was received on the given IN pipe
source§

fn completed_out( &mut self, dev_addr: DeviceAddress, pipe_id: PipeId, - _data: &mut [u8] -)

Called when new data is needed for the given OUT pipe
source§

fn stall(&mut self, dev_addr: DeviceAddress)

Called when a device sends a STALL

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).

+ _data: &mut [u8] +)

Called when new data is needed for the given OUT pipe
source§

fn stall(&mut self, dev_addr: DeviceAddress)

Called when a device sends a STALL

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).

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 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 diff --git a/doc/usbh/driver/trait.Driver.html b/doc/usbh/driver/trait.Driver.html index 57250da..a2878cc 100644 --- a/doc/usbh/driver/trait.Driver.html +++ b/doc/usbh/driver/trait.Driver.html @@ -1,4 +1,4 @@ -Driver in usbh::driver - Rust

Trait usbh::driver::Driver

source ·
pub trait Driver<B: HostBus> {
+Driver in usbh::driver - Rust

Trait usbh::driver::Driver

source ·
pub trait Driver<B: HostBus> {
     // Required methods
     fn attached(
         &mut self,
@@ -9,86 +9,86 @@
     fn descriptor(
         &mut self,
         dev_addr: DeviceAddress,
-        descriptor_type: u8,
-        data: &[u8]
+        descriptor_type: u8,
+        data: &[u8]
     );
-    fn configure(&mut self, dev_addr: DeviceAddress) -> Option<u8>;
+    fn configure(&mut self, dev_addr: DeviceAddress) -> Option<u8>;
     fn configured(
         &mut self,
         dev_addr: DeviceAddress,
-        value: u8,
+        value: u8,
         host: &mut UsbHost<B>
     );
     fn completed_control(
         &mut self,
         dev_addr: DeviceAddress,
         pipe_id: PipeId,
-        data: Option<&[u8]>
+        data: Option<&[u8]>
     );
     fn completed_in(
         &mut self,
         dev_addr: DeviceAddress,
         pipe_id: PipeId,
-        data: &[u8]
+        data: &[u8]
     );
     fn completed_out(
         &mut self,
         dev_addr: DeviceAddress,
         pipe_id: PipeId,
-        data: &mut [u8]
+        data: &mut [u8]
     );
 
     // Provided method
     fn stall(&mut self, _dev_addr: DeviceAddress) { ... }
 }
Expand description

The Driver trait

See module-level documentation for details.

-

Required Methods§

Required Methods§

source

fn attached( &mut self, dev_addr: DeviceAddress, connection_speed: ConnectionSpeed )

New device was attached, and got assigned the given address.

This is where the driver can set up internal structures to continue processing the device.

-
source

fn detached(&mut self, dev_addr: DeviceAddress)

The device with the given address was detached.

+
source

fn detached(&mut self, dev_addr: DeviceAddress)

The device with the given address was detached.

Clean up any internal data related to the device here.

-
source

fn descriptor( +

source

fn descriptor( &mut self, dev_addr: DeviceAddress, - descriptor_type: u8, - data: &[u8] + descriptor_type: u8, + data: &[u8] )

A descriptor was received for the device

When a new device is attached, the device descriptor and all the configuration descriptors will be requested by the enumeration process and fed to all of the drivers.

The driver should parse these descriptors to figure out if it can handle a given device or not.

-
source

fn configure(&mut self, dev_addr: DeviceAddress) -> Option<u8>

The host is asking the driver to configure the device.

+
source

fn configure(&mut self, dev_addr: DeviceAddress) -> Option<u8>

The host is asking the driver to configure the device.

If the driver can handle one of the configurations of the device (based on the descriptor), it should return that configuration’s value (crate::descriptor::ConfigurationDescriptor::value).

Otherwise it should return None.

This method is called on each of the drivers, until the first one succeeds.

-
source

fn configured( +

source

fn configured( &mut self, dev_addr: DeviceAddress, - value: u8, + value: u8, host: &mut UsbHost<B> )

Informs the driver that a given configuration was selected for this device.

Here the driver can set up pipes for the device’s endpoints.

-
source

fn completed_control( +

source

fn completed_control( &mut self, dev_addr: DeviceAddress, pipe_id: PipeId, - data: Option<&[u8]> + data: Option<&[u8]> )

Called when a control transfer was completed on the given pipe

For IN transfers, data contains the received data, for OUT transfers it is None.

-
source

fn completed_in( +

source

fn completed_in( &mut self, dev_addr: DeviceAddress, pipe_id: PipeId, - data: &[u8] + data: &[u8] )

Called when data was received on the given IN pipe

-
source

fn completed_out( +

source

fn completed_out( &mut self, dev_addr: DeviceAddress, pipe_id: PipeId, - data: &mut [u8] + data: &mut [u8] )

Called when new data is needed for the given OUT pipe

-

Provided Methods§

source

fn stall(&mut self, _dev_addr: DeviceAddress)

Called when a device sends a STALL

-

Implementors§

source§

impl<B: HostBus> Driver<B> for KbdDriver

source§

impl<B: HostBus> Driver<B> for LogDriver

source§

impl<B: HostBus, const MAX_HUBS: usize> Driver<B> for HubDriver<MAX_HUBS>

\ No newline at end of file +

Provided Methods§

source

fn stall(&mut self, _dev_addr: DeviceAddress)

Called when a device sends a STALL

+

Implementors§

source§

impl<B: HostBus> Driver<B> for KbdDriver

source§

impl<B: HostBus> Driver<B> for LogDriver

source§

impl<B: HostBus, const MAX_HUBS: usize> Driver<B> for HubDriver<MAX_HUBS>

\ No newline at end of file diff --git a/doc/usbh/enum.ControlError.html b/doc/usbh/enum.ControlError.html index 292deaa..c174aab 100644 --- a/doc/usbh/enum.ControlError.html +++ b/doc/usbh/enum.ControlError.html @@ -1,4 +1,4 @@ -ControlError in usbh - Rust

Enum usbh::ControlError

source ·
pub enum ControlError {
+ControlError in usbh - Rust

Enum usbh::ControlError

source ·
pub enum ControlError {
     WouldBlock,
     InvalidPipe,
 }
Expand description

Error initiating a control transfer

@@ -7,16 +7,16 @@
§

InvalidPipe

A control transfer was initiated using an invalid PipeId.

This could indicate a bug in the driver (the driver held on to a pipe handle after the corresponding device was detached), or a bug in application code (e.g. if the host was reset without re-initializing all drivers).

-

Trait Implementations§

source§

impl Clone for ControlError

source§

fn clone(&self) -> ControlError

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<ControlError> for HubError

source§

fn from(e: ControlError) -> Self

Converts to this type from the input type.
source§

impl From<ControlError> for KbdError

source§

fn from(e: ControlError) -> Self

Converts to this type from the input type.
source§

impl PartialEq<ControlError> for ControlError

source§

fn eq(&self, other: &ControlError) -> 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 ControlError

source§

impl StructuralPartialEq for ControlError

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).

+

Trait Implementations§

source§

impl Clone for ControlError

source§

fn clone(&self) -> ControlError

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<ControlError> for HubError

source§

fn from(e: ControlError) -> Self

Converts to this type from the input type.
source§

impl From<ControlError> for KbdError

source§

fn from(e: ControlError) -> Self

Converts to this type from the input type.
source§

impl PartialEq<ControlError> for ControlError

source§

fn eq(&self, other: &ControlError) -> 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 ControlError

source§

impl StructuralPartialEq for ControlError

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).

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 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 diff --git a/doc/usbh/enum.Event.html b/doc/usbh/enum.Event.html index 3d1d55e..ba11732 100644 --- a/doc/usbh/enum.Event.html +++ b/doc/usbh/enum.Event.html @@ -1,23 +1,23 @@ -Event in usbh - Rust

Enum usbh::Event

source ·
pub enum Event {
+Event in usbh - Rust

Enum usbh::Event

source ·
pub enum Event {
     None,
     Attached(ConnectionSpeed),
     Detached,
-    ControlInData(Option<PipeId>, u16),
-    ControlOutComplete(Option<PipeId>),
+    ControlInData(Option<PipeId>, u16),
+    ControlOutComplete(Option<PipeId>),
     Stall,
     Resume,
-    InterruptPipe(u8),
+    InterruptPipe(u8),
     BusError(Error),
     Sof,
 }
Expand description

Internal event type, used by poll and the enumeration process

-

Variants§

§

None

§

Attached(ConnectionSpeed)

§

Detached

§

ControlInData(Option<PipeId>, u16)

§

ControlOutComplete(Option<PipeId>)

§

Stall

§

Resume

§

InterruptPipe(u8)

§

BusError(Error)

§

Sof

Trait Implementations§

source§

impl Clone for Event

source§

fn clone(&self) -> Event

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 Format for Event

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl Copy for Event

Auto Trait Implementations§

§

impl RefUnwindSafe for Event

§

impl Send for Event

§

impl Sync for Event

§

impl Unpin for Event

§

impl UnwindSafe for Event

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§

§

None

§

Attached(ConnectionSpeed)

§

Detached

§

ControlInData(Option<PipeId>, u16)

§

ControlOutComplete(Option<PipeId>)

§

Stall

§

Resume

§

InterruptPipe(u8)

§

BusError(Error)

§

Sof

Trait Implementations§

source§

impl Clone for Event

source§

fn clone(&self) -> Event

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 Format for Event

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl Copy for Event

Auto Trait Implementations§

§

impl RefUnwindSafe for Event

§

impl Send for Event

§

impl Sync for Event

§

impl Unpin for Event

§

impl UnwindSafe for Event

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).

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 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 diff --git a/doc/usbh/enum.PollResult.html b/doc/usbh/enum.PollResult.html index ab9481f..871c59e 100644 --- a/doc/usbh/enum.PollResult.html +++ b/doc/usbh/enum.PollResult.html @@ -1,4 +1,4 @@ -PollResult in usbh - Rust

Enum usbh::PollResult

source ·
#[non_exhaustive]
pub enum PollResult { +PollResult in usbh - Rust

Enum usbh::PollResult

source ·
#[non_exhaustive]
pub enum PollResult { NoDevice, Busy, Idle, @@ -11,14 +11,14 @@
§

BusError(Error)

The host bus encountered an error

§

DiscoveryError(DeviceAddress)

An error happened during discovery.

After this result the host is put in “dormant” state until the device is removed.

-

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).

+

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).

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 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 diff --git a/doc/usbh/index.html b/doc/usbh/index.html index 56b4804..daa80b2 100644 --- a/doc/usbh/index.html +++ b/doc/usbh/index.html @@ -1,4 +1,4 @@ -usbh - Rust

Crate usbh

source ·
Expand description

Experimental host-side USB stack for embedded devices.

+usbh - Rust

Crate usbh

source ·
Expand description

Experimental host-side USB stack for embedded devices.

usbh aims to abstract between two things:

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 diff --git a/doc/usbh/struct.UsbHost.html b/doc/usbh/struct.UsbHost.html index 26cf710..5e275ce 100644 --- a/doc/usbh/struct.UsbHost.html +++ b/doc/usbh/struct.UsbHost.html @@ -1,4 +1,4 @@ -UsbHost in usbh - Rust

Struct usbh::UsbHost

source ·
pub struct UsbHost<B> { /* private fields */ }
Expand description

Entrypoint for the USB host stack

+UsbHost in usbh - Rust

Struct usbh::UsbHost

source ·
pub struct UsbHost<B> { /* private fields */ }
Expand description

Entrypoint for the USB host stack

The UsbHost type is the core of the host stack, implementing various state machines to facilitate:

Implementations§

source§

impl<B: HostBus> UsbHost<B>

source

pub fn new(bus: B) -> Self

Initialize the USB host stack

+

Implementations§

source§

impl<B: HostBus> UsbHost<B>

source

pub fn new(bus: B) -> Self

Initialize the USB host stack

Resets the HostBus controller using reset_controller.

-
source

pub fn poll(&mut self, drivers: &mut [&mut dyn Driver<B>]) -> PollResult

Poll the USB host. This must be called reasonably often.

+
source

pub fn poll(&mut self, drivers: &mut [&mut dyn Driver<B>]) -> PollResult

Poll the USB host. This must be called reasonably often.

If the host implementation has an interrupt that fires on USB activity, then calling it once in that interrupt handler is enough. Otherwise make sure to call it at least once per millisecond.

The given list of drivers must be the same on every call to poll, otherwise drivers will likely not function as intended.

@@ -30,7 +30,7 @@

Host stack phases

-
source

pub fn reset(&mut self)

Reset the entire host stack

+
source

pub fn reset(&mut self)

Reset the entire host stack

This resets the host controller (via bus::HostBus::reset_controller) and resets all internal state of the UsbHost to their defaults.

Any current transfer will never complete, and any pipes created will no longer be valid. @@ -40,91 +40,91 @@

Host stack phasesPipeId or DeviceAddress held by the application or driver(s) must be considered invalid after a reset. Continuing to use them can lead to strange behavior, since after a reset, pipe and device addresses will be re-used.

-

source

pub fn create_control_pipe(&mut self, dev_addr: DeviceAddress) -> Option<PipeId>

Create a pipe for control transfers

+
source

pub fn create_control_pipe(&mut self, dev_addr: DeviceAddress) -> Option<PipeId>

Create a pipe for control transfers

This method is meant to be called by drivers.

The returned PipeId can be used to initiate transfers by calling control_out, control_in or one of their wrappers.

Returns None if the maximum number of supported pipes has been reached.

-
source

pub fn ls_preamble(&mut self, enable: bool)

source

pub fn control_in( +

source

pub fn ls_preamble(&mut self, enable: bool)

source

pub fn control_in( &mut self, - dev_addr: Option<DeviceAddress>, - pipe_id: Option<PipeId>, + dev_addr: Option<DeviceAddress>, + pipe_id: Option<PipeId>, setup: SetupPacket -) -> Result<(), ControlError>

Initiate an IN transfer on the control endpoint of the given device

+) -> Result<(), ControlError>

Initiate an IN transfer on the control endpoint of the given device

If a pipe_id is given, the driver that set up the pipe will be able to associate the subsequent completed_control callback with this transfer. Otherwise the transfer will not be reported to any drivers.

The number of bytes transferred is determined by the length from the setup packet.

If there is currently a transfer in progress, ControlError::WouldBlock is returned, and no attempt is made to initiate the transfer.

This method is usually called by drivers, not by application code.

-
source

pub fn control_out( +

source

pub fn control_out( &mut self, - dev_addr: Option<DeviceAddress>, - pipe_id: Option<PipeId>, + dev_addr: Option<DeviceAddress>, + pipe_id: Option<PipeId>, setup: SetupPacket, - data: &[u8] -) -> Result<(), ControlError>

Initiate an OUT transfer on the control endpoint of the given device

+ data: &[u8] +) -> Result<(), ControlError>

Initiate an OUT transfer on the control endpoint of the given device

If a pipe_id is given, the driver that set up the pipe will be able to associate the driver::Driver::completed_control call with this transfer. Otherwise the transfer will not be reported to any drivers.

The length of the setup packet MUST be equal to the size of the data slice.

If there is currently a transfer in progress, ControlError::WouldBlock is returned, and no attempt is made to initiate the transfer.

This method is usually called by drivers, not by application code.

-
source

pub fn get_descriptor( +

source

pub fn get_descriptor( &mut self, - dev_addr: Option<DeviceAddress>, - pipe_id: Option<PipeId>, + dev_addr: Option<DeviceAddress>, + pipe_id: Option<PipeId>, recipient: Recipient, - descriptor_type: u8, - descriptor_index: u8, - length: u16 -) -> Result<(), ControlError>

Initiate a Get_Descriptor (0x06) control IN transfer

+ descriptor_type: u8, + descriptor_index: u8, + length: u16 +) -> Result<(), ControlError>

Initiate a Get_Descriptor (0x06) control IN transfer

This is a convenience wrapper around UsbHost::control_in, for the Get_Descriptor standard request.

The descriptor_type can be one of the TYPE_* constants defined in the descriptor module, but usally these are already requested during the discovery phase.

Thus usually this method will be used to request class- or vendor-specific descriptors.

-
source

pub fn get_status( +
source

pub fn get_status( &mut self, dev_addr: DeviceAddress, pipe_id: PipeId, recipient: Recipient -) -> Result<(), ControlError>

source

pub fn set_configuration( +) -> Result<(), ControlError>

source

pub fn set_configuration( &mut self, dev_addr: DeviceAddress, - pipe_id: Option<PipeId>, - configuration: u8 -) -> Result<(), ControlError>

Initiate a Set_Configuration (0x09) control OUT transfer

+ pipe_id: Option<PipeId>, + configuration: u8 +) -> Result<(), ControlError>

Initiate a Set_Configuration (0x09) control OUT transfer

This is a convenience wrapper around UsbHost::control_out for the Set_Configuration standard request.

Normally this does not need to be called manually. Instead the configuration is selected by the usb host during the discovery phase, depending on the drivers.

Changing the configuration after the discovery phase is not supported yet by the driver interface. While it will probably work, make sure your drivers are aware of it and can handle this situation.

-
source

pub fn create_interrupt_pipe( +

source

pub fn create_interrupt_pipe( &mut self, dev_addr: DeviceAddress, - ep_number: u8, + ep_number: u8, direction: UsbDirection, - size: u16, - interval: u8 -) -> Option<PipeId>

Create a pipe for interrupt transfers

+ size: u16, + interval: u8 +) -> Option<PipeId>

Create a pipe for interrupt transfers

This method is meant to be called by drivers.

Transfers on the interrupt pipe are always initiated by the host controller at the appropriate times.

Drivers must implement the completed_in / completed_out callbacks to consume / produce data for the pipe as needed. The returned PipeId will be passed to those callbacks for the driver to be able to associate the calls with an individual pipe they created.

Returns None if the maximum number of supported pipes has been reached.

-
source

pub fn bus(&mut self) -> &mut B

source

pub fn release_pipe(&mut self, pipe_id: PipeId)

Auto Trait Implementations§

§

impl<B> RefUnwindSafe for UsbHost<B>where - B: RefUnwindSafe,

§

impl<B> Send for UsbHost<B>where - B: Send,

§

impl<B> !Sync for UsbHost<B>

§

impl<B> Unpin for UsbHost<B>where - B: Unpin,

§

impl<B> UnwindSafe for UsbHost<B>where - B: UnwindSafe,

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).

+
source

pub fn bus(&mut self) -> &mut B

source

pub fn release_pipe(&mut self, pipe_id: PipeId)

Auto Trait Implementations§

§

impl<B> RefUnwindSafe for UsbHost<B>where + B: RefUnwindSafe,

§

impl<B> Send for UsbHost<B>where + B: Send,

§

impl<B> !Sync for UsbHost<B>

§

impl<B> Unpin for UsbHost<B>where + B: Unpin,

§

impl<B> UnwindSafe for UsbHost<B>where + B: UnwindSafe,

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).

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 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 diff --git a/doc/usbh/types/enum.ConnectionSpeed.html b/doc/usbh/types/enum.ConnectionSpeed.html index 5f8a662..02b8e05 100644 --- a/doc/usbh/types/enum.ConnectionSpeed.html +++ b/doc/usbh/types/enum.ConnectionSpeed.html @@ -1,19 +1,19 @@ -ConnectionSpeed in usbh::types - Rust
pub enum ConnectionSpeed {
+ConnectionSpeed in usbh::types - Rust
pub enum ConnectionSpeed {
     Low,
     Full,
 }
Expand description

Refers to the speed at which a device operates

Variants§

§

Low

USB 1.0 low speed

§

Full

USB 1.0 full speed

-

Trait Implementations§

source§

impl Clone for ConnectionSpeed

source§

fn clone(&self) -> ConnectionSpeed

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 Format for ConnectionSpeed

source§

fn format(&self, fmt: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl PartialEq<ConnectionSpeed> for ConnectionSpeed

source§

fn eq(&self, other: &ConnectionSpeed) -> 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 ConnectionSpeed

source§

impl StructuralPartialEq for ConnectionSpeed

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).

+

Trait Implementations§

source§

impl Clone for ConnectionSpeed

source§

fn clone(&self) -> ConnectionSpeed

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 Format for ConnectionSpeed

source§

fn format(&self, fmt: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl PartialEq<ConnectionSpeed> for ConnectionSpeed

source§

fn eq(&self, other: &ConnectionSpeed) -> 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 ConnectionSpeed

source§

impl StructuralPartialEq for ConnectionSpeed

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).

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 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 diff --git a/doc/usbh/types/enum.TransferType.html b/doc/usbh/types/enum.TransferType.html index bc99351..e637498 100644 --- a/doc/usbh/types/enum.TransferType.html +++ b/doc/usbh/types/enum.TransferType.html @@ -1,19 +1,19 @@ -TransferType in usbh::types - Rust

Enum usbh::types::TransferType

source ·
#[repr(u8)]
pub enum TransferType { +TransferType in usbh::types - Rust

Enum usbh::types::TransferType

source ·
#[repr(u8)]
pub enum TransferType { Control, Isochronous, Bulk, Interrupt, }
Expand description

Represents one of the four transfer types that USB supports

-

Variants§

§

Control

§

Isochronous

§

Bulk

§

Interrupt

Trait Implementations§

source§

impl Clone for TransferType

source§

fn clone(&self) -> TransferType

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 PartialEq<TransferType> for TransferType

source§

fn eq(&self, other: &TransferType) -> 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 TransferType

source§

impl StructuralPartialEq for TransferType

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§

§

Control

§

Isochronous

§

Bulk

§

Interrupt

Trait Implementations§

source§

impl Clone for TransferType

source§

fn clone(&self) -> TransferType

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 PartialEq<TransferType> for TransferType

source§

fn eq(&self, other: &TransferType) -> 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 TransferType

source§

impl StructuralPartialEq for TransferType

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).

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 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 diff --git a/doc/usbh/types/index.html b/doc/usbh/types/index.html index 1ab8488..e06a47a 100644 --- a/doc/usbh/types/index.html +++ b/doc/usbh/types/index.html @@ -1,2 +1,2 @@ -usbh::types - Rust

Module usbh::types

source ·
Expand description

Common types used throughout the crate

+usbh::types - Rust

Module usbh::types

source ·
Expand description

Common types used throughout the crate

Structs

  • Represents a 16-bit binary-coded-decimal value
  • An address that was assigned to a device by the host.
  • Represents a setup packet

Enums

\ No newline at end of file diff --git a/doc/usbh/types/struct.Bcd16.html b/doc/usbh/types/struct.Bcd16.html index ee43369..dccff39 100644 --- a/doc/usbh/types/struct.Bcd16.html +++ b/doc/usbh/types/struct.Bcd16.html @@ -1,17 +1,17 @@ -Bcd16 in usbh::types - Rust

Struct usbh::types::Bcd16

source ·
pub struct Bcd16(_);
Expand description

Represents a 16-bit binary-coded-decimal value

+Bcd16 in usbh::types - Rust

Struct usbh::types::Bcd16

source ·
pub struct Bcd16(_);
Expand description

Represents a 16-bit binary-coded-decimal value

A 16-bit BCD represents 4 decimal digits (0-9).

-

Implementations§

source§

impl Bcd16

source

pub fn to_digits(self) -> [u8; 4]

Returns the four contained digits as separate numbers

+

Implementations§

source§

impl Bcd16

source

pub fn to_digits(self) -> [u8; 4]

Returns the four contained digits as separate numbers

Each of the returned numbers is in the 0-9 range.

-

Trait Implementations§

source§

impl Clone for Bcd16

source§

fn clone(&self) -> Bcd16

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 Format for Bcd16

source§

fn format(&self, fmt: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl PartialEq<Bcd16> for Bcd16

source§

fn eq(&self, other: &Bcd16) -> 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 Bcd16

source§

impl StructuralPartialEq for Bcd16

Auto Trait Implementations§

§

impl RefUnwindSafe for Bcd16

§

impl Send for Bcd16

§

impl Sync for Bcd16

§

impl Unpin for Bcd16

§

impl UnwindSafe for Bcd16

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).

+

Trait Implementations§

source§

impl Clone for Bcd16

source§

fn clone(&self) -> Bcd16

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 Format for Bcd16

source§

fn format(&self, fmt: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl PartialEq<Bcd16> for Bcd16

source§

fn eq(&self, other: &Bcd16) -> 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 Bcd16

source§

impl StructuralPartialEq for Bcd16

Auto Trait Implementations§

§

impl RefUnwindSafe for Bcd16

§

impl Send for Bcd16

§

impl Sync for Bcd16

§

impl Unpin for Bcd16

§

impl UnwindSafe for Bcd16

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).

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 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 diff --git a/doc/usbh/types/struct.DeviceAddress.html b/doc/usbh/types/struct.DeviceAddress.html index 11c30f2..3eb19d1 100644 --- a/doc/usbh/types/struct.DeviceAddress.html +++ b/doc/usbh/types/struct.DeviceAddress.html @@ -1,18 +1,18 @@ -DeviceAddress in usbh::types - Rust

Struct usbh::types::DeviceAddress

source ·
pub struct DeviceAddress(_);
Expand description

An address that was assigned to a device by the host.

+DeviceAddress in usbh::types - Rust

Struct usbh::types::DeviceAddress

source ·
pub struct DeviceAddress(_);
Expand description

An address that was assigned to a device by the host.

The address may or may not represent a device that is currently attached. Normally device addresses are not reused, except when the address counter overflows.

This type only represents assigned addresses, and thus cannot represent the special address 0. Address 0 is only used to assign an address to the device during enumeration, and should not be used by any drivers.

-

Trait Implementations§

source§

impl Clone for DeviceAddress

source§

fn clone(&self) -> DeviceAddress

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 Format for DeviceAddress

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl From<DeviceAddress> for u16

source§

fn from(value: DeviceAddress) -> Self

Converts to this type from the input type.
source§

impl From<DeviceAddress> for u8

source§

fn from(value: DeviceAddress) -> Self

Converts to this type from the input type.
source§

impl PartialEq<DeviceAddress> for DeviceAddress

source§

fn eq(&self, other: &DeviceAddress) -> 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 DeviceAddress

source§

impl StructuralPartialEq for DeviceAddress

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).

+

Trait Implementations§

source§

impl Clone for DeviceAddress

source§

fn clone(&self) -> DeviceAddress

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 Format for DeviceAddress

source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
source§

impl From<DeviceAddress> for u16

source§

fn from(value: DeviceAddress) -> Self

Converts to this type from the input type.
source§

impl From<DeviceAddress> for u8

source§

fn from(value: DeviceAddress) -> Self

Converts to this type from the input type.
source§

impl PartialEq<DeviceAddress> for DeviceAddress

source§

fn eq(&self, other: &DeviceAddress) -> 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 DeviceAddress

source§

impl StructuralPartialEq for DeviceAddress

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).

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 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 diff --git a/doc/usbh/types/struct.SetupPacket.html b/doc/usbh/types/struct.SetupPacket.html index 0dbd2ed..3f905d6 100644 --- a/doc/usbh/types/struct.SetupPacket.html +++ b/doc/usbh/types/struct.SetupPacket.html @@ -1,21 +1,21 @@ -SetupPacket in usbh::types - Rust

Struct usbh::types::SetupPacket

source ·
pub struct SetupPacket {
-    pub request_type: u8,
-    pub request: u8,
-    pub value: u16,
-    pub index: u16,
-    pub length: u16,
+SetupPacket in usbh::types - Rust

Struct usbh::types::SetupPacket

source ·
pub struct SetupPacket {
+    pub request_type: u8,
+    pub request: u8,
+    pub value: u16,
+    pub index: u16,
+    pub length: u16,
 }
Expand description

Represents a setup packet

See SetupPacket::new for usage info.

NOTE: the fields are all public, because they must be read by the crate::bus::HostBus implementation. The fields are not meant to be written to though. Use the SetupPacket::new construct instead.

-

Fields§

§request_type: u8§request: u8§value: u16§index: u16§length: u16

Implementations§

source§

impl SetupPacket

source

pub fn new( +

Fields§

§request_type: u8§request: u8§value: u16§index: u16§length: u16

Implementations§

source§

impl SetupPacket

source

pub fn new( direction: UsbDirection, request_type: RequestType, recipient: Recipient, - request: u8, - value: u16, - index: u16, - length: u16 + request: u8, + value: u16, + index: u16, + length: u16 ) -> Self

Construct a setup packet for for a control transfer

Setup packets are then passed to the control_in / control_out methods.

Usually this is done by drivers, not application code.

@@ -32,14 +32,14 @@
  • length: length in bytes that will be transferred in the subsequent data stage. When calling control_out this must be equal to the size of the slice that is passed in as data.
  • -

    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).

    +

    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).

    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 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