diff options
87 files changed, 10589 insertions, 0 deletions
diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/.nojekyll diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt new file mode 100644 index 0000000..8773ce6 --- /dev/null +++ b/COPYRIGHT.txt @@ -0,0 +1,64 @@ +These documentation pages include resources by third parties. This copyright +file applies only to those resources. The following third party resources are +included, and carry their own copyright notices and license terms: + +* Fira Sans (FiraSans-Regular.woff, FiraSans-Medium.woff): + + Copyright (c) 2014, Mozilla Foundation https://mozilla.org/ + with Reserved Font Name Fira Sans. + + Copyright (c) 2014, Telefonica S.A. + + Licensed under the SIL Open Font License, Version 1.1. + See FiraSans-LICENSE.txt. + +* Heuristica (Heuristica-Italic.woff): + + Copyright 1989, 1991 Adobe Systems Incorporated. All rights reserved. + Utopia is either a registered trademark or trademark of Adobe Systems + Incorporated in the United States and/or other countries. Used under + license. + + Copyright 2006 Han The Thanh, Vntopia font family, http://vntex.sf.net + + Copyright (c) 2008-2012, Andrey V. Panov (panov@canopus.iacp.dvo.ru), + with Reserved Font Name Heuristica. + + Licensed under the SIL Open Font License, Version 1.1. + See Heuristica-LICENSE.txt. + +* jQuery (jquery-2.1.4.min.js): + + Copyright 2005, 2015 jQuery Foundation, Inc. + Licensed under the MIT license (see LICENSE-MIT.txt). + +* rustdoc.css, main.js, and playpen.js: + + Copyright 2015 The Rust Developers. + Licensed under the Apache License, Version 2.0 (see LICENSE-APACHE.txt) or + the MIT license (LICENSE-MIT.txt) at your option. + +* normalize.css: + + Copyright (c) Nicolas Gallagher and Jonathan Neal. + Licensed under the MIT license (see LICENSE-MIT.txt). + +* Source Code Pro (SourceCodePro-Regular.woff, SourceCodePro-Semibold.woff): + + Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), + with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark + of Adobe Systems Incorporated in the United States and/or other countries. + + Licensed under the SIL Open Font License, Version 1.1. + See SourceCodePro-LICENSE.txt. + +* Source Serif Pro (SourceSerifPro-Regular.woff, SourceSerifPro-Bold.woff): + + Copyright 2014 Adobe Systems Incorporated (http://www.adobe.com/), with + Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of + Adobe Systems Incorporated in the United States and/or other countries. + + Licensed under the SIL Open Font License, Version 1.1. + See SourceSerifPro-LICENSE.txt. + +This copyright file is intended to be distributed with rustdoc output. diff --git a/FiraSans-LICENSE.txt b/FiraSans-LICENSE.txt new file mode 100644 index 0000000..b4a3967 --- /dev/null +++ b/FiraSans-LICENSE.txt @@ -0,0 +1,99 @@ +Copyright (c) 2014, Mozilla Foundation https://mozilla.org/ +with Reserved Font Name Fira Sans. + +Copyright (c) 2014, Mozilla Foundation https://mozilla.org/ +with Reserved Font Name Fira Mono. + +Copyright (c) 2014, Telefonica S.A. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/FiraSans-Medium.woff b/FiraSans-Medium.woff Binary files differnew file mode 100644 index 0000000..5627227 --- /dev/null +++ b/FiraSans-Medium.woff diff --git a/FiraSans-Regular.woff b/FiraSans-Regular.woff Binary files differnew file mode 100644 index 0000000..9ff4044 --- /dev/null +++ b/FiraSans-Regular.woff diff --git a/Heuristica-Italic.woff b/Heuristica-Italic.woff Binary files differnew file mode 100644 index 0000000..b0cebf0 --- /dev/null +++ b/Heuristica-Italic.woff diff --git a/Heuristica-LICENSE.txt b/Heuristica-LICENSE.txt new file mode 100644 index 0000000..dd85e40 --- /dev/null +++ b/Heuristica-LICENSE.txt @@ -0,0 +1,101 @@ +Copyright 1989, 1991 Adobe Systems Incorporated. All rights reserved. +Utopia is either a registered trademark or trademark of Adobe Systems +Incorporated in the United States and/or other countries. Used under +license. + +Copyright 2006 Han The Thanh, Vntopia font family, http://vntex.sf.net + +Copyright (c) 2008-2012, Andrey V. Panov (panov@canopus.iacp.dvo.ru), +with Reserved Font Name Heuristica. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/LICENSE-APACHE.txt b/LICENSE-APACHE.txt new file mode 100644 index 0000000..16fe87b --- /dev/null +++ b/LICENSE-APACHE.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/LICENSE-MIT.txt b/LICENSE-MIT.txt new file mode 100644 index 0000000..31aa793 --- /dev/null +++ b/LICENSE-MIT.txt @@ -0,0 +1,23 @@ +Permission is hereby granted, free of charge, to any +person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the +Software without restriction, including without +limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice +shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED +TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/SourceCodePro-LICENSE.txt b/SourceCodePro-LICENSE.txt new file mode 100644 index 0000000..0754257 --- /dev/null +++ b/SourceCodePro-LICENSE.txt @@ -0,0 +1,93 @@ +Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. + +This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/SourceCodePro-Regular.woff b/SourceCodePro-Regular.woff Binary files differnew file mode 100644 index 0000000..5576670 --- /dev/null +++ b/SourceCodePro-Regular.woff diff --git a/SourceCodePro-Semibold.woff b/SourceCodePro-Semibold.woff Binary files differnew file mode 100644 index 0000000..ca972a1 --- /dev/null +++ b/SourceCodePro-Semibold.woff diff --git a/SourceSerifPro-Bold.woff b/SourceSerifPro-Bold.woff Binary files differnew file mode 100644 index 0000000..ac1b1b3 --- /dev/null +++ b/SourceSerifPro-Bold.woff diff --git a/SourceSerifPro-LICENSE.txt b/SourceSerifPro-LICENSE.txt new file mode 100644 index 0000000..b77d653 --- /dev/null +++ b/SourceSerifPro-LICENSE.txt @@ -0,0 +1,93 @@ +Copyright 2014 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. + +This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/SourceSerifPro-Regular.woff b/SourceSerifPro-Regular.woff Binary files differnew file mode 100644 index 0000000..e8c43b8 --- /dev/null +++ b/SourceSerifPro-Regular.woff diff --git a/implementors/core/clone/trait.Clone.js b/implementors/core/clone/trait.Clone.js new file mode 100644 index 0000000..d20de2d --- /dev/null +++ b/implementors/core/clone/trait.Clone.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["plist"] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html' title='core::clone::Clone'>Clone</a> for <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>","impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html' title='core::clone::Clone'>Clone</a> for <a class='enum' href='plist/enum.PlistEvent.html' title='plist::PlistEvent'>PlistEvent</a>",]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/implementors/core/cmp/trait.PartialEq.js b/implementors/core/cmp/trait.PartialEq.js new file mode 100644 index 0000000..5ba147a --- /dev/null +++ b/implementors/core/cmp/trait.PartialEq.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["plist"] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html' title='core::cmp::PartialEq'>PartialEq</a> for <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>","impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html' title='core::cmp::PartialEq'>PartialEq</a> for <a class='enum' href='plist/enum.PlistEvent.html' title='plist::PlistEvent'>PlistEvent</a>",]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/implementors/core/convert/trait.From.js b/implementors/core/convert/trait.From.js new file mode 100644 index 0000000..9b1cd6d --- /dev/null +++ b/implementors/core/convert/trait.From.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["plist"] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.FromUtf8Error.html' title='collections::string::FromUtf8Error'>FromUtf8Error</a>> for <a class='enum' href='plist/enum.Error.html' title='plist::Error'>Error</a>","impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.FromUtf16Error.html' title='collections::string::FromUtf16Error'>FromUtf16Error</a>> for <a class='enum' href='plist/enum.Error.html' title='plist::Error'>Error</a>","impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='struct' href='https://lifthrasiir.github.io/rust-chrono/chrono/format/struct.ParseError.html' title='chrono::format::ParseError'>ChronoParseError</a>> for <a class='enum' href='plist/enum.Error.html' title='plist::Error'>Error</a>","impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><XmlWriterError> for <a class='enum' href='plist/enum.Error.html' title='plist::Error'>Error</a>","impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a><<a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>>> for <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>","impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/btree/map/struct.BTreeMap.html' title='collections::btree::map::BTreeMap'>BTreeMap</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.String.html' title='collections::string::String'>String</a>, <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>>> for <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>","impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a>> for <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>","impl<'a> <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><&'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a>> for <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>","impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='struct' href='https://lifthrasiir.github.io/rust-chrono/chrono/datetime/struct.DateTime.html' title='chrono::datetime::DateTime'>DateTime</a><<a class='struct' href='https://lifthrasiir.github.io/rust-chrono/chrono/offset/utc/struct.UTC.html' title='chrono::offset::utc::UTC'>UTC</a>>> for <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>","impl<'a> <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><&'a <a class='struct' href='https://lifthrasiir.github.io/rust-chrono/chrono/datetime/struct.DateTime.html' title='chrono::datetime::DateTime'>DateTime</a><<a class='struct' href='https://lifthrasiir.github.io/rust-chrono/chrono/offset/utc/struct.UTC.html' title='chrono::offset::utc::UTC'>UTC</a>>> for <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>","impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.f64.html'>f64</a>> for <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>","impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.f32.html'>f32</a>> for <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>","impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i64.html'>i64</a>> for <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>","impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i32.html'>i32</a>> for <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>","impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i16.html'>i16</a>> for <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>","impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i8.html'>i8</a>> for <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>","impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u32.html'>u32</a>> for <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>","impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u16.html'>u16</a>> for <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>","impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a>> for <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>","impl<'a> <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><&'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.f64.html'>f64</a>> for <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>","impl<'a> <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><&'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.f32.html'>f32</a>> for <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>","impl<'a> <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><&'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i64.html'>i64</a>> for <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>","impl<'a> <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><&'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i32.html'>i32</a>> for <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>","impl<'a> <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><&'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i16.html'>i16</a>> for <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>","impl<'a> <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><&'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i8.html'>i8</a>> for <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>","impl<'a> <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><&'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u32.html'>u32</a>> for <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>","impl<'a> <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><&'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u16.html'>u16</a>> for <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>","impl<'a> <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><&'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a>> for <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>","impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.String.html' title='collections::string::String'>String</a>> for <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>","impl<'a> <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><&'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>> for <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>","impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='struct' href='https://doc.rust-lang.org/nightly/std/io/error/struct.Error.html' title='std::io::error::Error'>IoError</a>> for <a class='enum' href='plist/enum.Error.html' title='plist::Error'>Error</a>",]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/implementors/core/fmt/trait.Debug.js b/implementors/core/fmt/trait.Debug.js new file mode 100644 index 0000000..44e1213 --- /dev/null +++ b/implementors/core/fmt/trait.Debug.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["plist"] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html' title='core::fmt::Debug'>Debug</a> for <a class='enum' href='plist/enum.Plist.html' title='plist::Plist'>Plist</a>","impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html' title='core::fmt::Debug'>Debug</a> for <a class='enum' href='plist/enum.PlistEvent.html' title='plist::PlistEvent'>PlistEvent</a>","impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html' title='core::fmt::Debug'>Debug</a> for <a class='enum' href='plist/enum.Error.html' title='plist::Error'>Error</a>",]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/implementors/core/fmt/trait.Display.js b/implementors/core/fmt/trait.Display.js new file mode 100644 index 0000000..ce30413 --- /dev/null +++ b/implementors/core/fmt/trait.Display.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["plist"] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html' title='core::fmt::Display'>Display</a> for <a class='enum' href='plist/enum.Error.html' title='plist::Error'>Error</a>",]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/implementors/core/iter/iterator/trait.Iterator.js b/implementors/core/iter/iterator/trait.Iterator.js new file mode 100644 index 0000000..c38b949 --- /dev/null +++ b/implementors/core/iter/iterator/trait.Iterator.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["plist"] = ["impl<R: <a class='trait' href='https://doc.rust-lang.org/nightly/std/io/trait.Read.html' title='std::io::Read'>Read</a> + <a class='trait' href='https://doc.rust-lang.org/nightly/std/io/trait.Seek.html' title='std::io::Seek'>Seek</a>> <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Iterator</a> for <a class='struct' href='plist/binary/struct.EventReader.html' title='plist::binary::EventReader'>EventReader</a><R>","impl<R: <a class='trait' href='https://doc.rust-lang.org/nightly/std/io/trait.Read.html' title='std::io::Read'>Read</a>> <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Iterator</a> for <a class='struct' href='plist/xml/struct.EventReader.html' title='plist::xml::EventReader'>EventReader</a><R>","impl<R: <a class='trait' href='https://doc.rust-lang.org/nightly/std/io/trait.Read.html' title='std::io::Read'>Read</a> + <a class='trait' href='https://doc.rust-lang.org/nightly/std/io/trait.Seek.html' title='std::io::Seek'>Seek</a>> <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Iterator</a> for <a class='struct' href='plist/struct.EventReader.html' title='plist::EventReader'>EventReader</a><R>",]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/implementors/plist/trait.EventWriter.js b/implementors/plist/trait.EventWriter.js new file mode 100644 index 0000000..de2b89e --- /dev/null +++ b/implementors/plist/trait.EventWriter.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["plist"] = []; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/implementors/serde/de/trait.Deserializer.js b/implementors/serde/de/trait.Deserializer.js new file mode 100644 index 0000000..ec6f1e9 --- /dev/null +++ b/implementors/serde/de/trait.Deserializer.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["plist"] = ["impl<I> <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html' title='serde::de::Deserializer'>SerdeDeserializer</a> for <a class='struct' href='plist/struct.Deserializer.html' title='plist::Deserializer'>Deserializer</a><I> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a><Item=<a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='enum' href='plist/enum.PlistEvent.html' title='plist::PlistEvent'>PlistEvent</a>, <a class='enum' href='plist/enum.Error.html' title='plist::Error'>Error</a>>></span>",]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/implementors/serde/de/trait.Error.js b/implementors/serde/de/trait.Error.js new file mode 100644 index 0000000..6144ecc --- /dev/null +++ b/implementors/serde/de/trait.Error.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["plist"] = ["impl <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Error.html' title='serde::de::Error'>SerdeError</a> for <a class='enum' href='plist/enum.Error.html' title='plist::Error'>Error</a>",]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/implementors/serde/de/trait.VariantVisitor.js b/implementors/serde/de/trait.VariantVisitor.js new file mode 100644 index 0000000..7b362ff --- /dev/null +++ b/implementors/serde/de/trait.VariantVisitor.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["plist"] = ["impl<I> <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.VariantVisitor.html' title='serde::de::VariantVisitor'>VariantVisitor</a> for <a class='struct' href='plist/struct.Deserializer.html' title='plist::Deserializer'>Deserializer</a><I> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a><Item=<a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='enum' href='plist/enum.PlistEvent.html' title='plist::PlistEvent'>PlistEvent</a>, <a class='enum' href='plist/enum.Error.html' title='plist::Error'>Error</a>>></span>",]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/implementors/serde/ser/trait.Error.js b/implementors/serde/ser/trait.Error.js new file mode 100644 index 0000000..004bd42 --- /dev/null +++ b/implementors/serde/ser/trait.Error.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["plist"] = ["impl <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Error.html' title='serde::ser::Error'>SerdeError</a> for <a class='enum' href='plist/enum.Error.html' title='plist::Error'>Error</a>",]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/implementors/serde/ser/trait.Serializer.js b/implementors/serde/ser/trait.Serializer.js new file mode 100644 index 0000000..78a35d9 --- /dev/null +++ b/implementors/serde/ser/trait.Serializer.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["plist"] = ["impl<W: <a class='trait' href='plist/trait.EventWriter.html' title='plist::EventWriter'>EventWriter</a>> <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html' title='serde::ser::Serializer'>SerdeSerializer</a> for <a class='struct' href='plist/struct.Serializer.html' title='plist::Serializer'>Serializer</a><W>",]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/implementors/std/error/trait.Error.js b/implementors/std/error/trait.Error.js new file mode 100644 index 0000000..18736b7 --- /dev/null +++ b/implementors/std/error/trait.Error.js @@ -0,0 +1,10 @@ +(function() {var implementors = {}; +implementors["plist"] = ["impl <a class='trait' href='https://doc.rust-lang.org/nightly/std/error/trait.Error.html' title='std::error::Error'>Error</a> for <a class='enum' href='plist/enum.Error.html' title='plist::Error'>Error</a>",]; + + if (window.register_implementors) { + window.register_implementors(implementors); + } else { + window.pending_implementors = implementors; + } + +})() diff --git a/index.html b/index.html new file mode 100644 index 0000000..d578813 --- /dev/null +++ b/index.html @@ -0,0 +1 @@ +<meta http-equiv=refresh content=0;url=plist/index.html>
\ No newline at end of file diff --git a/jquery.js b/jquery.js new file mode 100644 index 0000000..49990d6 --- /dev/null +++ b/jquery.js @@ -0,0 +1,4 @@ +/*! jQuery v2.1.4 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b="length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function qa(){}qa.prototype=d.filters=d.pseudos,d.setFilters=new qa,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function ra(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+K.uid++}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){ +return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var aa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ba=/<([\w:]+)/,ca=/<|&#?\w+;/,da=/<(?:script|style|link)/i,ea=/checked\s*(?:[^=]|=\s*.checked.)/i,fa=/^$|\/(?:java|ecma)script/i,ga=/^true\/(.*)/,ha=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ia={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ia.optgroup=ia.option,ia.tbody=ia.tfoot=ia.colgroup=ia.caption=ia.thead,ia.th=ia.td;function ja(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function ka(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function la(a){var b=ga.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function ma(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function na(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function oa(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pa(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=oa(h),f=oa(a),d=0,e=f.length;e>d;d++)pa(f[d],g[d]);if(b)if(c)for(f=f||oa(a),g=g||oa(h),d=0,e=f.length;e>d;d++)na(f[d],g[d]);else na(a,h);return g=oa(h,"script"),g.length>0&&ma(g,!i&&oa(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(ca.test(e)){f=f||k.appendChild(b.createElement("div")),g=(ba.exec(e)||["",""])[1].toLowerCase(),h=ia[g]||ia._default,f.innerHTML=h[1]+e.replace(aa,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=oa(k.appendChild(e),"script"),i&&ma(f),c)){j=0;while(e=f[j++])fa.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=ja(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=ja(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(oa(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&ma(oa(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(oa(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!da.test(a)&&!ia[(ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(aa,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(oa(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(oa(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&ea.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(oa(c,"script"),ka),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,oa(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,la),j=0;g>j;j++)h=f[j],fa.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(ha,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qa,ra={};function sa(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function ta(a){var b=l,c=ra[a];return c||(c=sa(a,b),"none"!==c&&c||(qa=(qa||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qa[0].contentDocument,b.write(),b.close(),c=sa(a,b),qa.detach()),ra[a]=c),c}var ua=/^margin/,va=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wa=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)};function xa(a,b,c){var d,e,f,g,h=a.style;return c=c||wa(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),va.test(g)&&ua.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function ya(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),f.removeChild(c),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var za=/^(none|table(?!-c[ea]).+)/,Aa=new RegExp("^("+Q+")(.*)$","i"),Ba=new RegExp("^([+-])=("+Q+")","i"),Ca={position:"absolute",visibility:"hidden",display:"block"},Da={letterSpacing:"0",fontWeight:"400"},Ea=["Webkit","O","Moz","ms"];function Fa(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Ea.length;while(e--)if(b=Ea[e]+c,b in a)return b;return d}function Ga(a,b,c){var d=Aa.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Ha(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ia(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wa(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xa(a,b,f),(0>e||null==e)&&(e=a.style[b]),va.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Ha(a,b,c||(g?"border":"content"),d,f)+"px"}function Ja(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",ta(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xa(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fa(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Ba.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fa(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xa(a,b,d)),"normal"===e&&b in Da&&(e=Da[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?za.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Ca,function(){return Ia(a,b,d)}):Ia(a,b,d):void 0},set:function(a,c,d){var e=d&&wa(a);return Ga(a,c,d?Ha(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=ya(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xa,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ua.test(a)||(n.cssHooks[a+b].set=Ga)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wa(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Ja(this,!0)},hide:function(){return Ja(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Ka(a,b,c,d,e){return new Ka.prototype.init(a,b,c,d,e)}n.Tween=Ka,Ka.prototype={constructor:Ka,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Ka.propHooks[this.prop];return a&&a.get?a.get(this):Ka.propHooks._default.get(this)},run:function(a){var b,c=Ka.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Ka.propHooks._default.set(this),this}},Ka.prototype.init.prototype=Ka.prototype,Ka.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Ka.propHooks.scrollTop=Ka.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Ka.prototype.init,n.fx.step={};var La,Ma,Na=/^(?:toggle|show|hide)$/,Oa=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pa=/queueHooks$/,Qa=[Va],Ra={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Oa.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Oa.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sa(){return setTimeout(function(){La=void 0}),La=n.now()}function Ta(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ua(a,b,c){for(var d,e=(Ra[b]||[]).concat(Ra["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Va(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||ta(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Na.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?ta(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ua(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wa(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xa(a,b,c){var d,e,f=0,g=Qa.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=La||Sa(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:La||Sa(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wa(k,j.opts.specialEasing);g>f;f++)if(d=Qa[f].call(j,a,k,j.opts))return d;return n.map(k,Ua,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xa,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Ra[c]=Ra[c]||[],Ra[c].unshift(b)},prefilter:function(a,b){b?Qa.unshift(a):Qa.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xa(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pa.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Ta(b,!0),a,d,e)}}),n.each({slideDown:Ta("show"),slideUp:Ta("hide"),slideToggle:Ta("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(La=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),La=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Ma||(Ma=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Ma),Ma=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Ya,Za,$a=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Za:Ya)), +void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Za={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$a[b]||n.find.attr;$a[b]=function(a,b,d){var e,f;return d||(f=$a[b],$a[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$a[b]=f),e}});var _a=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_a.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ab=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ab," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ab," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ab," ").indexOf(b)>=0)return!0;return!1}});var bb=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bb,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cb=n.now(),db=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var eb=/#.*$/,fb=/([?&])_=[^&]*/,gb=/^(.*?):[ \t]*([^\r\n]*)$/gm,hb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,ib=/^(?:GET|HEAD)$/,jb=/^\/\//,kb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,lb={},mb={},nb="*/".concat("*"),ob=a.location.href,pb=kb.exec(ob.toLowerCase())||[];function qb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function rb(a,b,c,d){var e={},f=a===mb;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function sb(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function tb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function ub(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:ob,type:"GET",isLocal:hb.test(pb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":nb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?sb(sb(a,n.ajaxSettings),b):sb(n.ajaxSettings,a)},ajaxPrefilter:qb(lb),ajaxTransport:qb(mb),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=gb.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||ob)+"").replace(eb,"").replace(jb,pb[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=kb.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===pb[1]&&h[2]===pb[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(pb[3]||("http:"===pb[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),rb(lb,k,b,v),2===t)return v;i=n.event&&k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!ib.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(db.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=fb.test(d)?d.replace(fb,"$1_="+cb++):d+(db.test(d)?"&":"?")+"_="+cb++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+nb+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=rb(mb,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=tb(k,v,f)),u=ub(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var vb=/%20/g,wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&").replace(vb,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Bb=0,Cb={},Db={0:200,1223:204},Eb=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Cb)Cb[a]()}),k.cors=!!Eb&&"withCredentials"in Eb,k.ajax=Eb=!!Eb,n.ajaxTransport(function(a){var b;return k.cors||Eb&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Bb;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Cb[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Db[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Cb[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Fb=[],Gb=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Fb.pop()||n.expando+"_"+cb++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Gb.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Gb.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Gb,"$1"+e):b.jsonp!==!1&&(b.url+=(db.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Fb.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Hb=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Hb)return Hb.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Ib=a.document.documentElement;function Jb(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Jb(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Ib;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Ib})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Jb(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=ya(k.pixelPosition,function(a,c){return c?(c=xa(a,b),va.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Kb=a.jQuery,Lb=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Lb),b&&a.jQuery===n&&(a.jQuery=Kb),n},typeof b===U&&(a.jQuery=a.$=n),n}); diff --git a/main.css b/main.css new file mode 100644 index 0000000..6a9a24f --- /dev/null +++ b/main.css @@ -0,0 +1,133 @@ +/** + * Copyright 2015 The Rust Project Developers. See the COPYRIGHT + * file at the top-level directory of this distribution and at + * http://rust-lang.org/COPYRIGHT. + * + * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or + * http://www.apache.org/licenses/LICENSE-2.0> or the MIT license + * <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your + * option. This file may not be copied, modified, or distributed + * except according to those terms. + */ + +/* General structure and fonts */ + +body { + background-color: white; + color: black; +} + +h1, h2, h3:not(.impl):not(.method):not(.type):not(.tymethod), h4:not(.method):not(.type):not(.tymethod) { + color: black; +} +h1.fqn { + border-bottom-color: #D5D5D5; +} +h2, h3:not(.impl):not(.method):not(.type):not(.tymethod), h4:not(.method):not(.type):not(.tymethod) { + border-bottom-color: #DDDDDD; +} +.in-band { + background-color: white; +} + +div.stability > em > code { + background-color: initial; +} + +.docblock code, .docblock-short code { + background-color: #F5F5F5; +} +pre { + background-color: #F5F5F5; +} + +.sidebar .location { + background: #e1e1e1; + color: #333; +} + +.block a:hover { + background: #F5F5F5; +} + +.line-numbers span { color: #c67e2d; } +.line-numbers .line-highlighted { + background-color: #f6fdb0 !important; +} + +:target { background: #FDFFD3; } +.content .highlighted { + color: #000 !important; + background-color: #ccc; +} +.content .highlighted a, .content .highlighted span { color: #000 !important; } +.content .highlighted.trait { background-color: #fece7e; } +.content .highlighted.mod { background-color: #afc6e4; } +.content .highlighted.enum { background-color: #b4d1b9; } +.content .highlighted.struct { background-color: #e7b1a0; } +.content .highlighted.fn { background-color: #c6afb3; } +.content .highlighted.method { background-color: #c6afb3; } +.content .highlighted.tymethod { background-color: #c6afb3; } +.content .highlighted.type { background-color: #c6afb3; } + +.docblock h1, .docblock h2, .docblock h3, .docblock h4, .docblock h5 { + border-bottom-color: #DDD; +} + +.docblock table { + border-color: #ddd; +} + +.docblock table td { + border-top-color: #ddd; + border-bottom-color: #ddd; +} + +.docblock table th { + border-top-color: #ddd; + border-bottom-color: #ddd; +} + +.content span.primitive, .content a.primitive, .block a.current.primitive { color: #39a7bf; } +.content span.externcrate, +.content span.mod, .content a.mod, .block a.current.mod { color: #4d76ae; } +.content span.fn, .content a.fn, .block a.current.fn, +.content span.method, .content a.method, .block a.current.method, +.content span.tymethod, .content a.tymethod, .block a.current.tymethod, +.content .fnname { color: #8c6067; } + +pre.rust .comment { color: #8E908C; } +pre.rust .doccomment { color: #4D4D4C; } + +nav { + border-bottom-color: #e0e0e0; +} +nav.main .current { + border-top-color: #000; + border-bottom-color: #000; +} +nav.main .separator { + border: 1px solid #000; +} +a { + color: #000; +} + +.docblock a, .docblock-short a, .stability a { + color: #3873AD; +} + +a.test-arrow { + color: #f5f5f5; +} + +.content span.trait, .content a.trait, .block a.current.trait { color: #7c5af3; } + +.search-input { + color: #555; + box-shadow: 0 0 0 1px #e0e0e0, 0 0 0 2px transparent; + background-color: white; +} + +em.stab.unstable { background: #FFF5D6; border-color: #FFC600; } +em.stab.deprecated { background: #F3DFFF; border-color: #7F0087; } @@ -0,0 +1,1046 @@ +// Copyright 2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +/*jslint browser: true, es5: true */ +/*globals $: true, rootPath: true */ + +(function() { + "use strict"; + + // This mapping table should match the discriminants of + // `rustdoc::html::item_type::ItemType` type in Rust. + var itemTypes = ["mod", + "externcrate", + "import", + "struct", + "enum", + "fn", + "type", + "static", + "trait", + "impl", + "tymethod", + "method", + "structfield", + "variant", + "macro", + "primitive", + "associatedtype", + "constant", + "associatedconstant", + "union"]; + + // used for special search precedence + var TY_PRIMITIVE = itemTypes.indexOf("primitive"); + + $('.js-only').removeClass('js-only'); + + function getQueryStringParams() { + var params = {}; + window.location.search.substring(1).split("&"). + map(function(s) { + var pair = s.split("="); + params[decodeURIComponent(pair[0])] = + typeof pair[1] === "undefined" ? + null : decodeURIComponent(pair[1]); + }); + return params; + } + + function browserSupportsHistoryApi() { + return document.location.protocol != "file:" && + window.history && typeof window.history.pushState === "function"; + } + + function highlightSourceLines(ev) { + var i, from, to, match = window.location.hash.match(/^#?(\d+)(?:-(\d+))?$/); + if (match) { + from = parseInt(match[1], 10); + to = Math.min(50000, parseInt(match[2] || match[1], 10)); + from = Math.min(from, to); + if ($('#' + from).length === 0) { + return; + } + if (ev === null) { $('#' + from)[0].scrollIntoView(); }; + $('.line-numbers span').removeClass('line-highlighted'); + for (i = from; i <= to; ++i) { + $('#' + i).addClass('line-highlighted'); + } + } + } + highlightSourceLines(null); + $(window).on('hashchange', highlightSourceLines); + + // Gets the human-readable string for the virtual-key code of the + // given KeyboardEvent, ev. + // + // This function is meant as a polyfill for KeyboardEvent#key, + // since it is not supported in Trident. We also test for + // KeyboardEvent#keyCode because the handleShortcut handler is + // also registered for the keydown event, because Blink doesn't fire + // keypress on hitting the Escape key. + // + // So I guess you could say things are getting pretty interoperable. + function getVirtualKey(ev) { + if ("key" in ev && typeof ev.key != "undefined") + return ev.key; + + var c = ev.charCode || ev.keyCode; + if (c == 27) + return "Escape"; + return String.fromCharCode(c); + } + + function handleShortcut(ev) { + if (document.activeElement.tagName == "INPUT") + return; + + // Don't interfere with browser shortcuts + if (ev.ctrlKey || ev.altKey || ev.metaKey) + return; + + switch (getVirtualKey(ev)) { + case "Escape": + if (!$("#help").hasClass("hidden")) { + ev.preventDefault(); + $("#help").addClass("hidden"); + $("body").removeClass("blur"); + } else if (!$("#search").hasClass("hidden")) { + ev.preventDefault(); + $("#search").addClass("hidden"); + $("#main").removeClass("hidden"); + } + break; + + case "s": + case "S": + ev.preventDefault(); + focusSearchBar(); + break; + + case "+": + ev.preventDefault(); + toggleAllDocs(); + break; + + case "?": + if (ev.shiftKey && $("#help").hasClass("hidden")) { + ev.preventDefault(); + $("#help").removeClass("hidden"); + $("body").addClass("blur"); + } + break; + } + } + + $(document).on("keypress", handleShortcut); + $(document).on("keydown", handleShortcut); + $(document).on("click", function(ev) { + if (!$(ev.target).closest("#help > div").length) { + $("#help").addClass("hidden"); + $("body").removeClass("blur"); + } + }); + + $('.version-selector').on('change', function() { + var i, match, + url = document.location.href, + stripped = '', + len = rootPath.match(/\.\.\//g).length + 1; + + for (i = 0; i < len; ++i) { + match = url.match(/\/[^\/]*$/); + if (i < len - 1) { + stripped = match[0] + stripped; + } + url = url.substring(0, url.length - match[0].length); + } + + url += '/' + $('.version-selector').val() + stripped; + + document.location.href = url; + }); + + /** + * A function to compute the Levenshtein distance between two strings + * Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported + * Full License can be found at http://creativecommons.org/licenses/by-sa/3.0/legalcode + * This code is an unmodified version of the code written by Marco de Wit + * and was found at http://stackoverflow.com/a/18514751/745719 + */ + var levenshtein = (function() { + var row2 = []; + return function(s1, s2) { + if (s1 === s2) { + return 0; + } + var s1_len = s1.length, s2_len = s2.length; + if (s1_len && s2_len) { + var i1 = 0, i2 = 0, a, b, c, c2, row = row2; + while (i1 < s1_len) { + row[i1] = ++i1; + } + while (i2 < s2_len) { + c2 = s2.charCodeAt(i2); + a = i2; + ++i2; + b = i2; + for (i1 = 0; i1 < s1_len; ++i1) { + c = a + (s1.charCodeAt(i1) !== c2 ? 1 : 0); + a = row[i1]; + b = b < a ? (b < c ? b + 1 : c) : (a < c ? a + 1 : c); + row[i1] = b; + } + } + return b; + } + return s1_len + s2_len; + }; + })(); + + function initSearch(rawSearchIndex) { + var currentResults, index, searchIndex; + var MAX_LEV_DISTANCE = 3; + var params = getQueryStringParams(); + + // Populate search bar with query string search term when provided, + // but only if the input bar is empty. This avoid the obnoxious issue + // where you start trying to do a search, and the index loads, and + // suddenly your search is gone! + if ($(".search-input")[0].value === "") { + $(".search-input")[0].value = params.search || ''; + } + + /** + * Executes the query and builds an index of results + * @param {[Object]} query [The user query] + * @param {[type]} max [The maximum results returned] + * @param {[type]} searchWords [The list of search words to query + * against] + * @return {[type]} [A search index of results] + */ + function execQuery(query, max, searchWords) { + var valLower = query.query.toLowerCase(), + val = valLower, + typeFilter = itemTypeFromName(query.type), + results = [], + split = valLower.split("::"); + + // remove empty keywords + for (var j = 0; j < split.length; ++j) { + split[j].toLowerCase(); + if (split[j] === "") { + split.splice(j, 1); + } + } + + function typePassesFilter(filter, type) { + // No filter + if (filter < 0) return true; + + // Exact match + if (filter === type) return true; + + // Match related items + var name = itemTypes[type]; + switch (itemTypes[filter]) { + case "constant": + return (name == "associatedconstant"); + case "fn": + return (name == "method" || name == "tymethod"); + case "type": + return (name == "primitive"); + } + + // No match + return false; + } + + // quoted values mean literal search + var nSearchWords = searchWords.length; + if ((val.charAt(0) === "\"" || val.charAt(0) === "'") && + val.charAt(val.length - 1) === val.charAt(0)) + { + val = val.substr(1, val.length - 2); + for (var i = 0; i < nSearchWords; ++i) { + if (searchWords[i] === val) { + // filter type: ... queries + if (typePassesFilter(typeFilter, searchIndex[i].ty)) { + results.push({id: i, index: -1}); + } + } + if (results.length === max) { + break; + } + } + // searching by type + } else if (val.search("->") > -1) { + var trimmer = function (s) { return s.trim(); }; + var parts = val.split("->").map(trimmer); + var input = parts[0]; + // sort inputs so that order does not matter + var inputs = input.split(",").map(trimmer).sort().toString(); + var output = parts[1]; + + for (var i = 0; i < nSearchWords; ++i) { + var type = searchIndex[i].type; + if (!type) { + continue; + } + + // sort index inputs so that order does not matter + var typeInputs = type.inputs.map(function (input) { + return input.name; + }).sort(); + + // allow searching for void (no output) functions as well + var typeOutput = type.output ? type.output.name : ""; + if ((inputs === "*" || inputs === typeInputs.toString()) && + (output === "*" || output == typeOutput)) { + results.push({id: i, index: -1, dontValidate: true}); + } + } + } else { + // gather matching search results up to a certain maximum + val = val.replace(/\_/g, ""); + for (var i = 0; i < split.length; ++i) { + for (var j = 0; j < nSearchWords; ++j) { + var lev_distance; + if (searchWords[j].indexOf(split[i]) > -1 || + searchWords[j].indexOf(val) > -1 || + searchWords[j].replace(/_/g, "").indexOf(val) > -1) + { + // filter type: ... queries + if (typePassesFilter(typeFilter, searchIndex[j].ty)) { + results.push({ + id: j, + index: searchWords[j].replace(/_/g, "").indexOf(val), + lev: 0, + }); + } + } else if ( + (lev_distance = levenshtein(searchWords[j], val)) <= + MAX_LEV_DISTANCE) { + if (typePassesFilter(typeFilter, searchIndex[j].ty)) { + results.push({ + id: j, + index: 0, + // we want lev results to go lower than others + lev: lev_distance, + }); + } + } + if (results.length === max) { + break; + } + } + } + } + + var nresults = results.length; + for (var i = 0; i < nresults; ++i) { + results[i].word = searchWords[results[i].id]; + results[i].item = searchIndex[results[i].id] || {}; + } + // if there are no results then return to default and fail + if (results.length === 0) { + return []; + } + + results.sort(function sortResults(aaa, bbb) { + var a, b; + + // Sort by non levenshtein results and then levenshtein results by the distance + // (less changes required to match means higher rankings) + a = (aaa.lev); + b = (bbb.lev); + if (a !== b) { return a - b; } + + // sort by crate (non-current crate goes later) + a = (aaa.item.crate !== window.currentCrate); + b = (bbb.item.crate !== window.currentCrate); + if (a !== b) { return a - b; } + + // sort by exact match (mismatch goes later) + a = (aaa.word !== valLower); + b = (bbb.word !== valLower); + if (a !== b) { return a - b; } + + // sort by item name length (longer goes later) + a = aaa.word.length; + b = bbb.word.length; + if (a !== b) { return a - b; } + + // sort by item name (lexicographically larger goes later) + a = aaa.word; + b = bbb.word; + if (a !== b) { return (a > b ? +1 : -1); } + + // sort by index of keyword in item name (no literal occurrence goes later) + a = (aaa.index < 0); + b = (bbb.index < 0); + if (a !== b) { return a - b; } + // (later literal occurrence, if any, goes later) + a = aaa.index; + b = bbb.index; + if (a !== b) { return a - b; } + + // special precedence for primitive pages + if ((aaa.item.ty === TY_PRIMITIVE) && (bbb.item.ty !== TY_PRIMITIVE)) { + return -1; + } + if ((bbb.item.ty === TY_PRIMITIVE) && (aaa.item.ty !== TY_PRIMITIVE)) { + return 1; + } + + // sort by description (no description goes later) + a = (aaa.item.desc === ''); + b = (bbb.item.desc === ''); + if (a !== b) { return a - b; } + + // sort by type (later occurrence in `itemTypes` goes later) + a = aaa.item.ty; + b = bbb.item.ty; + if (a !== b) { return a - b; } + + // sort by path (lexicographically larger goes later) + a = aaa.item.path; + b = bbb.item.path; + if (a !== b) { return (a > b ? +1 : -1); } + + // que sera, sera + return 0; + }); + + // remove duplicates, according to the data provided + for (var i = results.length - 1; i > 0; i -= 1) { + if (results[i].word === results[i - 1].word && + results[i].item.ty === results[i - 1].item.ty && + results[i].item.path === results[i - 1].item.path && + (results[i].item.parent || {}).name === (results[i - 1].item.parent || {}).name) + { + results[i].id = -1; + } + } + for (var i = 0; i < results.length; ++i) { + var result = results[i], + name = result.item.name.toLowerCase(), + path = result.item.path.toLowerCase(), + parent = result.item.parent; + + // this validation does not make sense when searching by types + if (result.dontValidate) { + continue; + } + + var valid = validateResult(name, path, split, parent); + if (!valid) { + result.id = -1; + } + } + return results; + } + + /** + * Validate performs the following boolean logic. For example: + * "File::open" will give IF A PARENT EXISTS => ("file" && "open") + * exists in (name || path || parent) OR => ("file" && "open") exists in + * (name || path ) + * + * This could be written functionally, but I wanted to minimise + * functions on stack. + * + * @param {[string]} name [The name of the result] + * @param {[string]} path [The path of the result] + * @param {[string]} keys [The keys to be used (["file", "open"])] + * @param {[object]} parent [The parent of the result] + * @return {[boolean]} [Whether the result is valid or not] + */ + function validateResult(name, path, keys, parent) { + for (var i = 0; i < keys.length; ++i) { + // each check is for validation so we negate the conditions and invalidate + if (!( + // check for an exact name match + name.toLowerCase().indexOf(keys[i]) > -1 || + // then an exact path match + path.toLowerCase().indexOf(keys[i]) > -1 || + // next if there is a parent, check for exact parent match + (parent !== undefined && + parent.name.toLowerCase().indexOf(keys[i]) > -1) || + // lastly check to see if the name was a levenshtein match + levenshtein(name.toLowerCase(), keys[i]) <= + MAX_LEV_DISTANCE)) { + return false; + } + } + return true; + } + + function getQuery() { + var matches, type, query, raw = $('.search-input').val(); + query = raw; + + matches = query.match(/^(fn|mod|struct|enum|trait|type|const|macro)\s*:\s*/i); + if (matches) { + type = matches[1].replace(/^const$/, 'constant'); + query = query.substring(matches[0].length); + } + + return { + raw: raw, + query: query, + type: type, + id: query + type + }; + } + + function initSearchNav() { + var hoverTimeout, $results = $('.search-results .result'); + + $results.on('click', function() { + var dst = $(this).find('a')[0]; + if (window.location.pathname === dst.pathname) { + $('#search').addClass('hidden'); + $('#main').removeClass('hidden'); + document.location.href = dst.href; + } + }).on('mouseover', function() { + var $el = $(this); + clearTimeout(hoverTimeout); + hoverTimeout = setTimeout(function() { + $results.removeClass('highlighted'); + $el.addClass('highlighted'); + }, 20); + }); + + $(document).off('keydown.searchnav'); + $(document).on('keydown.searchnav', function(e) { + var $active = $results.filter('.highlighted'); + + if (e.which === 38) { // up + if (!$active.length || !$active.prev()) { + return; + } + + $active.prev().addClass('highlighted'); + $active.removeClass('highlighted'); + } else if (e.which === 40) { // down + if (!$active.length) { + $results.first().addClass('highlighted'); + } else if ($active.next().length) { + $active.next().addClass('highlighted'); + $active.removeClass('highlighted'); + } + } else if (e.which === 13) { // return + if ($active.length) { + document.location.href = $active.find('a').prop('href'); + } + } else { + $active.removeClass('highlighted'); + } + }); + } + + function escape(content) { + return $('<h1/>').text(content).html(); + } + + function showResults(results) { + var output, shown, query = getQuery(); + + currentResults = query.id; + output = '<h1>Results for ' + escape(query.query) + + (query.type ? ' (type: ' + escape(query.type) + ')' : '') + '</h1>'; + output += '<table class="search-results">'; + + if (results.length > 0) { + shown = []; + + results.forEach(function(item) { + var name, type, href, displayPath; + + if (shown.indexOf(item) !== -1) { + return; + } + + shown.push(item); + name = item.name; + type = itemTypes[item.ty]; + + if (type === 'mod') { + displayPath = item.path + '::'; + href = rootPath + item.path.replace(/::/g, '/') + '/' + + name + '/index.html'; + } else if (type === "primitive") { + displayPath = ""; + href = rootPath + item.path.replace(/::/g, '/') + + '/' + type + '.' + name + '.html'; + } else if (type === "externcrate") { + displayPath = ""; + href = rootPath + name + '/index.html'; + } else if (item.parent !== undefined) { + var myparent = item.parent; + var anchor = '#' + type + '.' + name; + var parentType = itemTypes[myparent.ty]; + if (parentType === "primitive") { + displayPath = myparent.name + '::'; + } else { + displayPath = item.path + '::' + myparent.name + '::'; + } + href = rootPath + item.path.replace(/::/g, '/') + + '/' + parentType + + '.' + myparent.name + + '.html' + anchor; + } else { + displayPath = item.path + '::'; + href = rootPath + item.path.replace(/::/g, '/') + + '/' + type + '.' + name + '.html'; + } + + output += '<tr class="' + type + ' result"><td>' + + '<a href="' + href + '">' + + displayPath + '<span class="' + type + '">' + + name + '</span></a></td><td>' + + '<a href="' + href + '">' + + '<span class="desc">' + item.desc + + ' </span></a></td></tr>'; + }); + } else { + output += 'No results :( <a href="https://duckduckgo.com/?q=' + + encodeURIComponent('rust ' + query.query) + + '">Try on DuckDuckGo?</a>'; + } + + output += "</p>"; + $('#main.content').addClass('hidden'); + $('#search.content').removeClass('hidden').html(output); + $('#search .desc').width($('#search').width() - 40 - + $('#search td:first-child').first().width()); + initSearchNav(); + } + + function search(e) { + var query, + filterdata = [], + obj, i, len, + results = [], + maxResults = 200, + resultIndex; + var params = getQueryStringParams(); + + query = getQuery(); + if (e) { + e.preventDefault(); + } + + if (!query.query || query.id === currentResults) { + return; + } + + // Update document title to maintain a meaningful browser history + $(document).prop("title", "Results for " + query.query + " - Rust"); + + // Because searching is incremental by character, only the most + // recent search query is added to the browser history. + if (browserSupportsHistoryApi()) { + if (!history.state && !params.search) { + history.pushState(query, "", "?search=" + + encodeURIComponent(query.raw)); + } else { + history.replaceState(query, "", "?search=" + + encodeURIComponent(query.raw)); + } + } + + resultIndex = execQuery(query, 20000, index); + len = resultIndex.length; + for (i = 0; i < len; ++i) { + if (resultIndex[i].id > -1) { + obj = searchIndex[resultIndex[i].id]; + filterdata.push([obj.name, obj.ty, obj.path, obj.desc]); + results.push(obj); + } + if (results.length >= maxResults) { + break; + } + } + + showResults(results); + } + + function itemTypeFromName(typename) { + for (var i = 0; i < itemTypes.length; ++i) { + if (itemTypes[i] === typename) { return i; } + } + return -1; + } + + function buildIndex(rawSearchIndex) { + searchIndex = []; + var searchWords = []; + for (var crate in rawSearchIndex) { + if (!rawSearchIndex.hasOwnProperty(crate)) { continue; } + + searchWords.push(crate); + searchIndex.push({ + crate: crate, + ty: 1, // == ExternCrate + name: crate, + path: "", + desc: rawSearchIndex[crate].doc, + type: null, + }); + + // an array of [(Number) item type, + // (String) name, + // (String) full path or empty string for previous path, + // (String) description, + // (Number | null) the parent path index to `paths`] + // (Object | null) the type of the function (if any) + var items = rawSearchIndex[crate].items; + // an array of [(Number) item type, + // (String) name] + var paths = rawSearchIndex[crate].paths; + + // convert `paths` into an object form + var len = paths.length; + for (var i = 0; i < len; ++i) { + paths[i] = {ty: paths[i][0], name: paths[i][1]}; + } + + // convert `items` into an object form, and construct word indices. + // + // before any analysis is performed lets gather the search terms to + // search against apart from the rest of the data. This is a quick + // operation that is cached for the life of the page state so that + // all other search operations have access to this cached data for + // faster analysis operations + var len = items.length; + var lastPath = ""; + for (var i = 0; i < len; ++i) { + var rawRow = items[i]; + var row = {crate: crate, ty: rawRow[0], name: rawRow[1], + path: rawRow[2] || lastPath, desc: rawRow[3], + parent: paths[rawRow[4]], type: rawRow[5]}; + searchIndex.push(row); + if (typeof row.name === "string") { + var word = row.name.toLowerCase(); + searchWords.push(word); + } else { + searchWords.push(""); + } + lastPath = row.path; + } + } + return searchWords; + } + + function startSearch() { + var searchTimeout; + $(".search-input").on("keyup input",function() { + clearTimeout(searchTimeout); + if ($(this).val().length === 0) { + if (browserSupportsHistoryApi()) { + history.replaceState("", "std - Rust", "?search="); + } + $('#main.content').removeClass('hidden'); + $('#search.content').addClass('hidden'); + } else { + searchTimeout = setTimeout(search, 500); + } + }); + $('.search-form').on('submit', function(e){ + e.preventDefault(); + clearTimeout(searchTimeout); + search(); + }); + $('.search-input').on('change paste', function(e) { + // Do NOT e.preventDefault() here. It will prevent pasting. + clearTimeout(searchTimeout); + // zero-timeout necessary here because at the time of event handler execution the + // pasted content is not in the input field yet. Shouldn’t make any difference for + // change, though. + setTimeout(search, 0); + }); + + // Push and pop states are used to add search results to the browser + // history. + if (browserSupportsHistoryApi()) { + // Store the previous <title> so we can revert back to it later. + var previousTitle = $(document).prop("title"); + + $(window).on('popstate', function(e) { + var params = getQueryStringParams(); + // When browsing back from search results the main page + // visibility must be reset. + if (!params.search) { + $('#main.content').removeClass('hidden'); + $('#search.content').addClass('hidden'); + } + // Revert to the previous title manually since the History + // API ignores the title parameter. + $(document).prop("title", previousTitle); + // When browsing forward to search results the previous + // search will be repeated, so the currentResults are + // cleared to ensure the search is successful. + currentResults = null; + // Synchronize search bar with query string state and + // perform the search. This will empty the bar if there's + // nothing there, which lets you really go back to a + // previous state with nothing in the bar. + $('.search-input').val(params.search); + // Some browsers fire 'onpopstate' for every page load + // (Chrome), while others fire the event only when actually + // popping a state (Firefox), which is why search() is + // called both here and at the end of the startSearch() + // function. + search(); + }); + } + search(); + } + + function plainSummaryLine(markdown) { + markdown.replace(/\n/g, ' ') + .replace(/'/g, "\'") + .replace(/^#+? (.+?)/, "$1") + .replace(/\[(.*?)\]\(.*?\)/g, "$1") + .replace(/\[(.*?)\]\[.*?\]/g, "$1"); + } + + index = buildIndex(rawSearchIndex); + startSearch(); + + // Draw a convenient sidebar of known crates if we have a listing + if (rootPath === '../') { + var sidebar = $('.sidebar'); + var div = $('<div>').attr('class', 'block crate'); + div.append($('<h3>').text('Crates')); + var ul = $('<ul>').appendTo(div); + + var crates = []; + for (var crate in rawSearchIndex) { + if (!rawSearchIndex.hasOwnProperty(crate)) { continue; } + crates.push(crate); + } + crates.sort(); + for (var i = 0; i < crates.length; ++i) { + var klass = 'crate'; + if (crates[i] === window.currentCrate) { + klass += ' current'; + } + if (rawSearchIndex[crates[i]].items[0]) { + var desc = rawSearchIndex[crates[i]].items[0][3]; + var link = $('<a>', {'href': '../' + crates[i] + '/index.html', + 'title': plainSummaryLine(desc), + 'class': klass}).text(crates[i]); + ul.append($('<li>').append(link)); + } + } + sidebar.append(div); + } + } + + window.initSearch = initSearch; + + // delayed sidebar rendering. + function initSidebarItems(items) { + var sidebar = $('.sidebar'); + var current = window.sidebarCurrent; + + function block(shortty, longty) { + var filtered = items[shortty]; + if (!filtered) { return; } + + var div = $('<div>').attr('class', 'block ' + shortty); + div.append($('<h3>').text(longty)); + var ul = $('<ul>').appendTo(div); + + for (var i = 0; i < filtered.length; ++i) { + var item = filtered[i]; + var name = item[0]; + var desc = item[1]; // can be null + + var klass = shortty; + if (name === current.name && shortty === current.ty) { + klass += ' current'; + } + var path; + if (shortty === 'mod') { + path = name + '/index.html'; + } else { + path = shortty + '.' + name + '.html'; + } + var link = $('<a>', {'href': current.relpath + path, + 'title': desc, + 'class': klass}).text(name); + ul.append($('<li>').append(link)); + } + sidebar.append(div); + } + + block("primitive", "Primitive Types"); + block("mod", "Modules"); + block("macro", "Macros"); + block("struct", "Structs"); + block("enum", "Enums"); + block("constant", "Constants"); + block("static", "Statics"); + block("trait", "Traits"); + block("fn", "Functions"); + block("type", "Type Definitions"); + } + + window.initSidebarItems = initSidebarItems; + + window.register_implementors = function(imp) { + var list = $('#implementors-list'); + var libs = Object.getOwnPropertyNames(imp); + for (var i = 0; i < libs.length; ++i) { + if (libs[i] === currentCrate) { continue; } + var structs = imp[libs[i]]; + for (var j = 0; j < structs.length; ++j) { + var code = $('<code>').append(structs[j]); + $.each(code.find('a'), function(idx, a) { + var href = $(a).attr('href'); + if (href && href.indexOf('http') !== 0) { + $(a).attr('href', rootPath + href); + } + }); + var li = $('<li>').append(code); + list.append(li); + } + } + }; + if (window.pending_implementors) { + window.register_implementors(window.pending_implementors); + } + + // See documentation in html/render.rs for what this is doing. + var query = getQueryStringParams(); + if (query['gotosrc']) { + window.location = $('#src-' + query['gotosrc']).attr('href'); + } + if (query['gotomacrosrc']) { + window.location = $('.srclink').attr('href'); + } + + function labelForToggleButton(sectionIsCollapsed) { + if (sectionIsCollapsed) { + // button will expand the section + return "+"; + } + // button will collapse the section + // note that this text is also set in the HTML template in render.rs + return "\u2212"; // "\u2212" is '−' minus sign + } + + function toggleAllDocs() { + var toggle = $("#toggle-all-docs"); + if (toggle.hasClass("will-expand")) { + toggle.removeClass("will-expand"); + toggle.children(".inner").text(labelForToggleButton(false)); + toggle.attr("title", "collapse all docs"); + $(".docblock").show(); + $(".toggle-label").hide(); + $(".toggle-wrapper").removeClass("collapsed"); + $(".collapse-toggle").children(".inner").text(labelForToggleButton(false)); + } else { + toggle.addClass("will-expand"); + toggle.children(".inner").text(labelForToggleButton(true)); + toggle.attr("title", "expand all docs"); + $(".docblock").hide(); + $(".toggle-label").show(); + $(".toggle-wrapper").addClass("collapsed"); + $(".collapse-toggle").children(".inner").text(labelForToggleButton(true)); + } + } + + $("#toggle-all-docs").on("click", toggleAllDocs); + + $(document).on("click", ".collapse-toggle", function() { + var toggle = $(this); + var relatedDoc = toggle.parent().next(); + if (relatedDoc.is(".stability")) { + relatedDoc = relatedDoc.next(); + } + if (relatedDoc.is(".docblock")) { + if (relatedDoc.is(":visible")) { + relatedDoc.slideUp({duration: 'fast', easing: 'linear'}); + toggle.parent(".toggle-wrapper").addClass("collapsed"); + toggle.children(".inner").text(labelForToggleButton(true)); + toggle.children(".toggle-label").fadeIn(); + } else { + relatedDoc.slideDown({duration: 'fast', easing: 'linear'}); + toggle.parent(".toggle-wrapper").removeClass("collapsed"); + toggle.children(".inner").text(labelForToggleButton(false)); + toggle.children(".toggle-label").hide(); + } + } + }); + + $(function() { + var toggle = $("<a/>", {'href': 'javascript:void(0)', 'class': 'collapse-toggle'}) + .html("[<span class='inner'></span>]"); + toggle.children(".inner").text(labelForToggleButton(false)); + + $(".method").each(function() { + if ($(this).next().is(".docblock") || + ($(this).next().is(".stability") && $(this).next().next().is(".docblock"))) { + $(this).children().last().after(toggle.clone()); + } + }); + + var mainToggle = + $(toggle).append( + $('<span/>', {'class': 'toggle-label'}) + .css('display', 'none') + .html(' Expand description')); + var wrapper = $("<div class='toggle-wrapper'>").append(mainToggle); + $("#main > .docblock").before(wrapper); + }); + + $('pre.line-numbers').on('click', 'span', function() { + var prev_id = 0; + + function set_fragment(name) { + if (browserSupportsHistoryApi()) { + history.replaceState(null, null, '#' + name); + $(window).trigger('hashchange'); + } else { + location.replace('#' + name); + } + } + + return function(ev) { + var cur_id = parseInt(ev.target.id, 10); + + if (ev.shiftKey && prev_id) { + if (prev_id > cur_id) { + var tmp = prev_id; + prev_id = cur_id; + cur_id = tmp; + } + + set_fragment(prev_id + '-' + cur_id); + } else { + prev_id = cur_id; + + set_fragment(cur_id); + } + }; + }()); + +}()); + +// Sets the focus on the search bar at the top of the page +function focusSearchBar() { + $('.search-input').focus(); +} diff --git a/normalize.css b/normalize.css new file mode 100644 index 0000000..2804c26 --- /dev/null +++ b/normalize.css @@ -0,0 +1 @@ +/*! normalize.css v3.0.0 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0} diff --git a/plist/Deserializer.t.html b/plist/Deserializer.t.html new file mode 100644 index 0000000..0b61b98 --- /dev/null +++ b/plist/Deserializer.t.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta http-equiv="refresh" content="0;URL=struct.Deserializer.html"> +</head> +<body> + <p>Redirecting to <a href="struct.Deserializer.html">struct.Deserializer.html</a>...</p> + <script>location.replace("struct.Deserializer.html" + location.search + location.hash);</script> +</body> +</html>
\ No newline at end of file diff --git a/plist/Error.t.html b/plist/Error.t.html new file mode 100644 index 0000000..1bf0d35 --- /dev/null +++ b/plist/Error.t.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta http-equiv="refresh" content="0;URL=enum.Error.html"> +</head> +<body> + <p>Redirecting to <a href="enum.Error.html">enum.Error.html</a>...</p> + <script>location.replace("enum.Error.html" + location.search + location.hash);</script> +</body> +</html>
\ No newline at end of file diff --git a/plist/EventReader.t.html b/plist/EventReader.t.html new file mode 100644 index 0000000..59e7663 --- /dev/null +++ b/plist/EventReader.t.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta http-equiv="refresh" content="0;URL=struct.EventReader.html"> +</head> +<body> + <p>Redirecting to <a href="struct.EventReader.html">struct.EventReader.html</a>...</p> + <script>location.replace("struct.EventReader.html" + location.search + location.hash);</script> +</body> +</html>
\ No newline at end of file diff --git a/plist/EventWriter.t.html b/plist/EventWriter.t.html new file mode 100644 index 0000000..f19853a --- /dev/null +++ b/plist/EventWriter.t.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta http-equiv="refresh" content="0;URL=trait.EventWriter.html"> +</head> +<body> + <p>Redirecting to <a href="trait.EventWriter.html">trait.EventWriter.html</a>...</p> + <script>location.replace("trait.EventWriter.html" + location.search + location.hash);</script> +</body> +</html>
\ No newline at end of file diff --git a/plist/Plist.t.html b/plist/Plist.t.html new file mode 100644 index 0000000..49a5c92 --- /dev/null +++ b/plist/Plist.t.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta http-equiv="refresh" content="0;URL=enum.Plist.html"> +</head> +<body> + <p>Redirecting to <a href="enum.Plist.html">enum.Plist.html</a>...</p> + <script>location.replace("enum.Plist.html" + location.search + location.hash);</script> +</body> +</html>
\ No newline at end of file diff --git a/plist/PlistEvent.t.html b/plist/PlistEvent.t.html new file mode 100644 index 0000000..a88cb42 --- /dev/null +++ b/plist/PlistEvent.t.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta http-equiv="refresh" content="0;URL=enum.PlistEvent.html"> +</head> +<body> + <p>Redirecting to <a href="enum.PlistEvent.html">enum.PlistEvent.html</a>...</p> + <script>location.replace("enum.PlistEvent.html" + location.search + location.hash);</script> +</body> +</html>
\ No newline at end of file diff --git a/plist/Result.t.html b/plist/Result.t.html new file mode 100644 index 0000000..865910f --- /dev/null +++ b/plist/Result.t.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta http-equiv="refresh" content="0;URL=type.Result.html"> +</head> +<body> + <p>Redirecting to <a href="type.Result.html">type.Result.html</a>...</p> + <script>location.replace("type.Result.html" + location.search + location.hash);</script> +</body> +</html>
\ No newline at end of file diff --git a/plist/Serializer.t.html b/plist/Serializer.t.html new file mode 100644 index 0000000..76217f7 --- /dev/null +++ b/plist/Serializer.t.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta http-equiv="refresh" content="0;URL=struct.Serializer.html"> +</head> +<body> + <p>Redirecting to <a href="struct.Serializer.html">struct.Serializer.html</a>...</p> + <script>location.replace("struct.Serializer.html" + location.search + location.hash);</script> +</body> +</html>
\ No newline at end of file diff --git a/plist/binary/EventReader.t.html b/plist/binary/EventReader.t.html new file mode 100644 index 0000000..59e7663 --- /dev/null +++ b/plist/binary/EventReader.t.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta http-equiv="refresh" content="0;URL=struct.EventReader.html"> +</head> +<body> + <p>Redirecting to <a href="struct.EventReader.html">struct.EventReader.html</a>...</p> + <script>location.replace("struct.EventReader.html" + location.search + location.hash);</script> +</body> +</html>
\ No newline at end of file diff --git a/plist/binary/index.html b/plist/binary/index.html new file mode 100644 index 0000000..c7271bb --- /dev/null +++ b/plist/binary/index.html @@ -0,0 +1,121 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="generator" content="rustdoc"> + <meta name="description" content="API documentation for the Rust `binary` mod in crate `plist`."> + <meta name="keywords" content="rust, rustlang, rust-lang, binary"> + + <title>plist::binary - Rust</title> + + <link rel="stylesheet" type="text/css" href="../../rustdoc.css"> + <link rel="stylesheet" type="text/css" href="../../main.css"> + + + + +</head> +<body class="rustdoc"> + <!--[if lte IE 8]> + <div class="warning"> + This old browser is unsupported and will most likely display funky + things. + </div> + <![endif]--> + + + + <nav class="sidebar"> + + <p class='location'><a href='../index.html'>plist</a></p><script>window.sidebarCurrent = {name: 'binary', ty: 'mod', relpath: '../'};</script><script defer src="../sidebar-items.js"></script> + </nav> + + <nav class="sub"> + <form class="search-form js-only"> + <div class="search-container"> + <input class="search-input" name="search" + autocomplete="off" + placeholder="Click or press ‘S’ to search, ‘?’ for more options…" + type="search"> + </div> + </form> + </nav> + + <section id='main' class="content mod"> +<h1 class='fqn'><span class='in-band'>Module <a href='../index.html'>plist</a>::<wbr><a class='mod' href=''>binary</a></span><span class='out-of-band'><span id='render-detail'> + <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs"> + [<span class='inner'>−</span>] + </a> + </span><a id='src-9' class='srclink' href='../../src/plist/src/binary/mod.rs.html#1-3' title='goto source code'>[src]</a></span></h1> +<h2 id='structs' class='section-header'><a href="#structs">Structs</a></h2> +<table> + <tr class=' module-item'> + <td><a class='struct' href='struct.EventReader.html' + title='plist::binary::EventReader'>EventReader</a></td> + <td class='docblock-short'> + <p><a href="https://opensource.apple.com/source/CF/CF-550/CFBinaryPList.c">https://opensource.apple.com/source/CF/CF-550/CFBinaryPList.c</a> +<a href="https://hg.python.org/cpython/file/3.4/Lib/plistlib.py">https://hg.python.org/cpython/file/3.4/Lib/plistlib.py</a></p> + </td> + </tr></table></section> + <section id='search' class="content hidden"></section> + + <section class="footer"></section> + + <aside id="help" class="hidden"> + <div> + <h1 class="hidden">Help</h1> + + <div class="shortcuts"> + <h2>Keyboard Shortcuts</h2> + + <dl> + <dt>?</dt> + <dd>Show this help dialog</dd> + <dt>S</dt> + <dd>Focus the search field</dd> + <dt>⇤</dt> + <dd>Move up in search results</dd> + <dt>⇥</dt> + <dd>Move down in search results</dd> + <dt>⏎</dt> + <dd>Go to active search result</dd> + <dt>+</dt> + <dd>Collapse/expand all sections</dd> + </dl> + </div> + + <div class="infos"> + <h2>Search Tricks</h2> + + <p> + Prefix searches with a type followed by a colon (e.g. + <code>fn:</code>) to restrict the search to a given type. + </p> + + <p> + Accepted types are: <code>fn</code>, <code>mod</code>, + <code>struct</code>, <code>enum</code>, + <code>trait</code>, <code>type</code>, <code>macro</code>, + and <code>const</code>. + </p> + + <p> + Search functions by type signature (e.g. + <code>vec -> usize</code> or <code>* -> vec</code>) + </p> + </div> + </div> + </aside> + + + + <script> + window.rootPath = "../../"; + window.currentCrate = "plist"; + </script> + <script src="../../jquery.js"></script> + <script src="../../main.js"></script> + <script defer src="../../search-index.js"></script> +</body> +</html>
\ No newline at end of file diff --git a/plist/binary/reader/EventReader.t.html b/plist/binary/reader/EventReader.t.html new file mode 100644 index 0000000..59e7663 --- /dev/null +++ b/plist/binary/reader/EventReader.t.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta http-equiv="refresh" content="0;URL=struct.EventReader.html"> +</head> +<body> + <p>Redirecting to <a href="struct.EventReader.html">struct.EventReader.html</a>...</p> + <script>location.replace("struct.EventReader.html" + location.search + location.hash);</script> +</body> +</html>
\ No newline at end of file diff --git a/plist/binary/reader/struct.EventReader.html b/plist/binary/reader/struct.EventReader.html new file mode 100644 index 0000000..a26c9e5 --- /dev/null +++ b/plist/binary/reader/struct.EventReader.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta http-equiv="refresh" content="0;URL=../../../plist/binary/struct.EventReader.html"> +</head> +<body> + <p>Redirecting to <a href="../../../plist/binary/struct.EventReader.html">../../../plist/binary/struct.EventReader.html</a>...</p> + <script>location.replace("../../../plist/binary/struct.EventReader.html" + location.search + location.hash);</script> +</body> +</html>
\ No newline at end of file diff --git a/plist/binary/sidebar-items.js b/plist/binary/sidebar-items.js new file mode 100644 index 0000000..0261bfe --- /dev/null +++ b/plist/binary/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"struct":[["EventReader","https://opensource.apple.com/source/CF/CF-550/CFBinaryPList.c https://hg.python.org/cpython/file/3.4/Lib/plistlib.py"]]});
\ No newline at end of file diff --git a/plist/binary/struct.EventReader.html b/plist/binary/struct.EventReader.html new file mode 100644 index 0000000..f911f17 --- /dev/null +++ b/plist/binary/struct.EventReader.html @@ -0,0 +1,217 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="generator" content="rustdoc"> + <meta name="description" content="API documentation for the Rust `EventReader` struct in crate `plist`."> + <meta name="keywords" content="rust, rustlang, rust-lang, EventReader"> + + <title>plist::binary::EventReader - Rust</title> + + <link rel="stylesheet" type="text/css" href="../../rustdoc.css"> + <link rel="stylesheet" type="text/css" href="../../main.css"> + + + + +</head> +<body class="rustdoc"> + <!--[if lte IE 8]> + <div class="warning"> + This old browser is unsupported and will most likely display funky + things. + </div> + <![endif]--> + + + + <nav class="sidebar"> + + <p class='location'><a href='../index.html'>plist</a>::<wbr><a href='index.html'>binary</a></p><script>window.sidebarCurrent = {name: 'EventReader', ty: 'struct', relpath: ''};</script><script defer src="sidebar-items.js"></script> + </nav> + + <nav class="sub"> + <form class="search-form js-only"> + <div class="search-container"> + <input class="search-input" name="search" + autocomplete="off" + placeholder="Click or press ‘S’ to search, ‘?’ for more options…" + type="search"> + </div> + </form> + </nav> + + <section id='main' class="content struct"> +<h1 class='fqn'><span class='in-band'>Struct <a href='../index.html'>plist</a>::<wbr><a href='index.html'>binary</a>::<wbr><a class='struct' href=''>EventReader</a></span><span class='out-of-band'><span id='render-detail'> + <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs"> + [<span class='inner'>−</span>] + </a> + </span><a id='src-27' class='srclink' href='../../src/plist/src/binary/reader.rs.html#33-39' title='goto source code'>[src]</a></span></h1> +<pre class='rust struct'>pub struct EventReader<R> { /* fields omitted */ }</pre><div class='docblock'><p><a href="https://opensource.apple.com/source/CF/CF-550/CFBinaryPList.c">https://opensource.apple.com/source/CF/CF-550/CFBinaryPList.c</a> +<a href="https://hg.python.org/cpython/file/3.4/Lib/plistlib.py">https://hg.python.org/cpython/file/3.4/Lib/plistlib.py</a></p> +</div><h2 id='methods'>Methods</h2><h3 class='impl'><span class='in-band'><code>impl<R: <a class='trait' href='https://doc.rust-lang.org/nightly/std/io/trait.Read.html' title='std::io::Read'>Read</a> + <a class='trait' href='https://doc.rust-lang.org/nightly/std/io/trait.Seek.html' title='std::io::Seek'>Seek</a>> <a class='struct' href='../../plist/binary/struct.EventReader.html' title='plist::binary::EventReader'>EventReader</a><R></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-34' class='srclink' href='../../src/plist/src/binary/reader.rs.html#41-277' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.new' class='method'><span id='new.v' class='invisible'><code>fn <a href='#method.new' class='fnname'>new</a>(reader: R) -> <a class='struct' href='../../plist/binary/struct.EventReader.html' title='plist::binary::EventReader'>EventReader</a><R></code></span></h4> +</div><h2 id='implementations'>Trait Implementations</h2><h3 class='impl'><span class='in-band'><code>impl<R: <a class='trait' href='https://doc.rust-lang.org/nightly/std/io/trait.Read.html' title='std::io::Read'>Read</a> + <a class='trait' href='https://doc.rust-lang.org/nightly/std/io/trait.Seek.html' title='std::io::Seek'>Seek</a>> <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Iterator</a> for <a class='struct' href='../../plist/binary/struct.EventReader.html' title='plist::binary::EventReader'>EventReader</a><R></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-114' class='srclink' href='../../src/plist/src/binary/reader.rs.html#279-299' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='associatedtype.Item' class='type'><span id='Item.t' class='invisible'><code>type <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#associatedtype.Item' class='type'>Item</a> = <a class='type' href='../../plist/type.Result.html' title='plist::Result'>Result</a><<a class='enum' href='../../plist/enum.PlistEvent.html' title='plist::PlistEvent'>PlistEvent</a>></code></span></h4> +<div class='docblock'><p>The type of the elements being iterated over.</p> +</div><h4 id='method.next' class='method'><span id='next.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#tymethod.next' class='fnname'>next</a>(&mut self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><<a class='type' href='../../plist/type.Result.html' title='plist::Result'>Result</a><<a class='enum' href='../../plist/enum.PlistEvent.html' title='plist::PlistEvent'>PlistEvent</a>>></code></span></h4> +<div class='docblock'><p>Advances the iterator and returns the next value. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#tymethod.next">Read more</a></p> +</div><h4 id='method.size_hint' class='method'><span id='size_hint.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.size_hint' class='fnname'>size_hint</a>(&self) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>(</a><a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>, <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>><a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>)</a></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Returns the bounds on the remaining length of the iterator. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.size_hint">Read more</a></p> +</div><h4 id='method.count' class='method'><span id='count.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.count' class='fnname'>count</a>(self) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Consumes the iterator, counting the number of iterations and returning it. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.count">Read more</a></p> +</div><h4 id='method.last' class='method'><span id='last.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.last' class='fnname'>last</a>(self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Consumes the iterator, returning the last element. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.last">Read more</a></p> +</div><h4 id='method.nth' class='method'><span id='nth.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.nth' class='fnname'>nth</a>(&mut self, n: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Returns the <code>n</code>th element of the iterator. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.nth">Read more</a></p> +</div><h4 id='method.chain' class='method'><span id='chain.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.chain' class='fnname'>chain</a><U>(self, other: U) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Chain.html' title='core::iter::Chain'>Chain</a><Self, U::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIter</a>> <span class='where'>where U: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a><Item=Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Takes two iterators and creates a new iterator over both in sequence. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.chain">Read more</a></p> +</div><h4 id='method.zip' class='method'><span id='zip.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.zip' class='fnname'>zip</a><U>(self, other: U) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Zip.html' title='core::iter::Zip'>Zip</a><Self, U::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIter</a>> <span class='where'>where U: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>'Zips up' two iterators into a single iterator of pairs. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.zip">Read more</a></p> +</div><h4 id='method.map' class='method'><span id='map.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.map' class='fnname'>map</a><B, F>(self, f: F) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Map.html' title='core::iter::Map'>Map</a><Self, F> <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> B</span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Takes a closure and creates an iterator which calls that closure on each element. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.map">Read more</a></p> +</div><h4 id='method.filter' class='method'><span id='filter.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.filter' class='fnname'>filter</a><P>(self, predicate: P) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Filter.html' title='core::iter::Filter'>Filter</a><Self, P> <span class='where'>where P: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator which uses a closure to determine if an element should be yielded. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.filter">Read more</a></p> +</div><h4 id='method.filter_map' class='method'><span id='filter_map.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.filter_map' class='fnname'>filter_map</a><B, F>(self, f: F) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.FilterMap.html' title='core::iter::FilterMap'>FilterMap</a><Self, F> <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><B></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator that both filters and maps. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.filter_map">Read more</a></p> +</div><h4 id='method.enumerate' class='method'><span id='enumerate.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.enumerate' class='fnname'>enumerate</a>(self) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Enumerate.html' title='core::iter::Enumerate'>Enumerate</a><Self></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator which gives the current iteration count as well as the next value. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.enumerate">Read more</a></p> +</div><h4 id='method.peekable' class='method'><span id='peekable.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.peekable' class='fnname'>peekable</a>(self) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Peekable.html' title='core::iter::Peekable'>Peekable</a><Self></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator which can use <code>peek</code> to look at the next element of the iterator without consuming it. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.peekable">Read more</a></p> +</div><h4 id='method.skip_while' class='method'><span id='skip_while.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.skip_while' class='fnname'>skip_while</a><P>(self, predicate: P) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.SkipWhile.html' title='core::iter::SkipWhile'>SkipWhile</a><Self, P> <span class='where'>where P: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator that [<code>skip()</code>]s elements based on a predicate. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.skip_while">Read more</a></p> +</div><h4 id='method.take_while' class='method'><span id='take_while.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.take_while' class='fnname'>take_while</a><P>(self, predicate: P) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.TakeWhile.html' title='core::iter::TakeWhile'>TakeWhile</a><Self, P> <span class='where'>where P: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator that yields elements based on a predicate. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.take_while">Read more</a></p> +</div><h4 id='method.skip' class='method'><span id='skip.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.skip' class='fnname'>skip</a>(self, n: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Skip.html' title='core::iter::Skip'>Skip</a><Self></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator that skips the first <code>n</code> elements. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.skip">Read more</a></p> +</div><h4 id='method.take' class='method'><span id='take.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.take' class='fnname'>take</a>(self, n: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Take.html' title='core::iter::Take'>Take</a><Self></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator that yields its first <code>n</code> elements. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.take">Read more</a></p> +</div><h4 id='method.scan' class='method'><span id='scan.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.scan' class='fnname'>scan</a><St, B, F>(self, initial_state: St, f: F) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Scan.html' title='core::iter::Scan'>Scan</a><Self, St, F> <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&mut St, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><B></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>An iterator adaptor similar to [<code>fold()</code>] that holds internal state and produces a new iterator. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.scan">Read more</a></p> +</div><h4 id='method.flat_map' class='method'><span id='flat_map.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.flat_map' class='fnname'>flat_map</a><U, F>(self, f: F) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.FlatMap.html' title='core::iter::FlatMap'>FlatMap</a><Self, U, F> <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> U, U: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator that works like map, but flattens nested structure. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.flat_map">Read more</a></p> +</div><h4 id='method.fuse' class='method'><span id='fuse.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.fuse' class='fnname'>fuse</a>(self) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Fuse.html' title='core::iter::Fuse'>Fuse</a><Self></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator which ends after the first <code>None</code>. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.fuse">Read more</a></p> +</div><h4 id='method.inspect' class='method'><span id='inspect.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.inspect' class='fnname'>inspect</a><F>(self, f: F) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Inspect.html' title='core::iter::Inspect'>Inspect</a><Self, F> <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Do something with each element of an iterator, passing the value on. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.inspect">Read more</a></p> +</div><h4 id='method.by_ref' class='method'><span id='by_ref.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.by_ref' class='fnname'>by_ref</a>(&mut self) -> &mut Self</code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Borrows an iterator, rather than consuming it. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.by_ref">Read more</a></p> +</div><h4 id='method.collect' class='method'><span id='collect.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.collect' class='fnname'>collect</a><B>(self) -> B <span class='where'>where B: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.FromIterator.html' title='core::iter::traits::FromIterator'>FromIterator</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Transforms an iterator into a collection. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.collect">Read more</a></p> +</div><h4 id='method.partition' class='method'><span id='partition.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.partition' class='fnname'>partition</a><B, F>(self, f: F) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>(</a>B, B<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>)</a> <span class='where'>where B: <a class='trait' href='https://doc.rust-lang.org/nightly/core/default/trait.Default.html' title='core::default::Default'>Default</a> + <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.Extend.html' title='core::iter::traits::Extend'>Extend</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>>, F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Consumes an iterator, creating two collections from it. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.partition">Read more</a></p> +</div><h4 id='method.fold' class='method'><span id='fold.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.fold' class='fnname'>fold</a><B, F>(self, init: B, f: F) -> B <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(B, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> B</span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>An iterator adaptor that applies a function, producing a single, final value. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.fold">Read more</a></p> +</div><h4 id='method.all' class='method'><span id='all.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.all' class='fnname'>all</a><F>(&mut self, f: F) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a> <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Tests if every element of the iterator matches a predicate. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.all">Read more</a></p> +</div><h4 id='method.any' class='method'><span id='any.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.any' class='fnname'>any</a><F>(&mut self, f: F) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a> <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Tests if any element of the iterator matches a predicate. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.any">Read more</a></p> +</div><h4 id='method.find' class='method'><span id='find.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.find' class='fnname'>find</a><P>(&mut self, predicate: P) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>> <span class='where'>where P: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Searches for an element of an iterator that satisfies a predicate. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.find">Read more</a></p> +</div><h4 id='method.position' class='method'><span id='position.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.position' class='fnname'>position</a><P>(&mut self, predicate: P) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>> <span class='where'>where P: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Searches for an element in an iterator, returning its index. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.position">Read more</a></p> +</div><h4 id='method.rposition' class='method'><span id='rposition.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.rposition' class='fnname'>rposition</a><P>(&mut self, predicate: P) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>> <span class='where'>where P: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a>, Self: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.ExactSizeIterator.html' title='core::iter::traits::ExactSizeIterator'>ExactSizeIterator</a> + <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.DoubleEndedIterator.html' title='core::iter::traits::DoubleEndedIterator'>DoubleEndedIterator</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Searches for an element in an iterator from the right, returning its index. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.rposition">Read more</a></p> +</div><h4 id='method.max' class='method'><span id='max.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.max' class='fnname'>max</a>(self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>> <span class='where'>where Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html' title='core::cmp::Ord'>Ord</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Returns the maximum element of an iterator. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.max">Read more</a></p> +</div><h4 id='method.min' class='method'><span id='min.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.min' class='fnname'>min</a>(self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>> <span class='where'>where Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html' title='core::cmp::Ord'>Ord</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Returns the minimum element of an iterator. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.min">Read more</a></p> +</div><h4 id='method.max_by_key' class='method'><span id='max_by_key.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.max_by_key' class='fnname'>max_by_key</a><B, F>(self, f: F) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>> <span class='where'>where B: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html' title='core::cmp::Ord'>Ord</a>, F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> B</span></code><div class='since' title='Stable since Rust version 1.6.0'>1.6.0</div></span></h4> +<div class='docblock'><p>Returns the element that gives the maximum value from the specified function. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.max_by_key">Read more</a></p> +</div><h4 id='method.max_by' class='method'><span id='max_by.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.max_by' class='fnname'>max_by</a><F>(self, compare: F) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>> <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>, &Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/cmp/enum.Ordering.html' title='core::cmp::Ordering'>Ordering</a></span></code></span></h4> +<div class='stability'><em class='stab unstable'>Unstable (<code>iter_max_by</code>)</em></div><div class='docblock'><p>Returns the element that gives the maximum value with respect to the specified comparison function. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.max_by">Read more</a></p> +</div><h4 id='method.min_by_key' class='method'><span id='min_by_key.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.min_by_key' class='fnname'>min_by_key</a><B, F>(self, f: F) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>> <span class='where'>where B: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html' title='core::cmp::Ord'>Ord</a>, F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> B</span></code><div class='since' title='Stable since Rust version 1.6.0'>1.6.0</div></span></h4> +<div class='docblock'><p>Returns the element that gives the minimum value from the specified function. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.min_by_key">Read more</a></p> +</div><h4 id='method.min_by' class='method'><span id='min_by.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.min_by' class='fnname'>min_by</a><F>(self, compare: F) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>> <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>, &Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/cmp/enum.Ordering.html' title='core::cmp::Ordering'>Ordering</a></span></code></span></h4> +<div class='stability'><em class='stab unstable'>Unstable (<code>iter_min_by</code>)</em></div><div class='docblock'><p>Returns the element that gives the minimum value with respect to the specified comparison function. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.min_by">Read more</a></p> +</div><h4 id='method.rev' class='method'><span id='rev.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.rev' class='fnname'>rev</a>(self) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Rev.html' title='core::iter::Rev'>Rev</a><Self> <span class='where'>where Self: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.DoubleEndedIterator.html' title='core::iter::traits::DoubleEndedIterator'>DoubleEndedIterator</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Reverses an iterator's direction. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.rev">Read more</a></p> +</div><h4 id='method.unzip' class='method'><span id='unzip.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.unzip' class='fnname'>unzip</a><A, B, FromA, FromB>(self) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>(</a>FromA, FromB<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>)</a> <span class='where'>where FromA: <a class='trait' href='https://doc.rust-lang.org/nightly/core/default/trait.Default.html' title='core::default::Default'>Default</a> + <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.Extend.html' title='core::iter::traits::Extend'>Extend</a><A>, FromB: <a class='trait' href='https://doc.rust-lang.org/nightly/core/default/trait.Default.html' title='core::default::Default'>Default</a> + <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.Extend.html' title='core::iter::traits::Extend'>Extend</a><B>, Self: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Iterator</a><Item=<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>(</a>A, B<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>)</a>></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Converts an iterator of pairs into a pair of containers. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.unzip">Read more</a></p> +</div><h4 id='method.cloned' class='method'><span id='cloned.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.cloned' class='fnname'>cloned</a><'a, T>(self) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Cloned.html' title='core::iter::Cloned'>Cloned</a><Self> <span class='where'>where Self: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Iterator</a><Item=&'a T>, T: 'a + <a class='trait' href='https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html' title='core::clone::Clone'>Clone</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator which <code>clone()</code>s all of its elements. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.cloned">Read more</a></p> +</div><h4 id='method.cycle' class='method'><span id='cycle.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.cycle' class='fnname'>cycle</a>(self) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Cycle.html' title='core::iter::Cycle'>Cycle</a><Self> <span class='where'>where Self: <a class='trait' href='https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html' title='core::clone::Clone'>Clone</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Repeats an iterator endlessly. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.cycle">Read more</a></p> +</div><h4 id='method.sum' class='method'><span id='sum.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.sum' class='fnname'>sum</a><S>(self) -> S <span class='where'>where S: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.Sum.html' title='core::iter::traits::Sum'>Sum</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.11.0'>1.11.0</div></span></h4> +<div class='docblock'><p>Sums the elements of an iterator. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.sum">Read more</a></p> +</div><h4 id='method.product' class='method'><span id='product.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.product' class='fnname'>product</a><P>(self) -> P <span class='where'>where P: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.Product.html' title='core::iter::traits::Product'>Product</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.11.0'>1.11.0</div></span></h4> +<div class='docblock'><p>Iterates over the entire iterator, multiplying all the elements <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.product">Read more</a></p> +</div><h4 id='method.cmp' class='method'><span id='cmp.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.cmp' class='fnname'>cmp</a><I>(self, other: I) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/cmp/enum.Ordering.html' title='core::cmp::Ordering'>Ordering</a> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a><Item=Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>>, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html' title='core::cmp::Ord'>Ord</a></span></code><div class='since' title='Stable since Rust version 1.5.0'>1.5.0</div></span></h4> +<div class='docblock'><p>Lexicographically compares the elements of this <code>Iterator</code> with those of another. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.cmp">Read more</a></p> +</div><h4 id='method.partial_cmp' class='method'><span id='partial_cmp.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.partial_cmp' class='fnname'>partial_cmp</a><I>(self, other: I) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><<a class='enum' href='https://doc.rust-lang.org/nightly/core/cmp/enum.Ordering.html' title='core::cmp::Ordering'>Ordering</a>> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a>, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html' title='core::cmp::PartialOrd'>PartialOrd</a><I::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.5.0'>1.5.0</div></span></h4> +<div class='docblock'><p>Lexicographically compares the elements of this <code>Iterator</code> with those of another. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.partial_cmp">Read more</a></p> +</div><h4 id='method.eq' class='method'><span id='eq.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.eq' class='fnname'>eq</a><I>(self, other: I) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a>, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html' title='core::cmp::PartialEq'>PartialEq</a><I::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.5.0'>1.5.0</div></span></h4> +<div class='docblock'><p>Determines if the elements of this <code>Iterator</code> are equal to those of another. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.eq">Read more</a></p> +</div><h4 id='method.ne' class='method'><span id='ne.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.ne' class='fnname'>ne</a><I>(self, other: I) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a>, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html' title='core::cmp::PartialEq'>PartialEq</a><I::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.5.0'>1.5.0</div></span></h4> +<div class='docblock'><p>Determines if the elements of this <code>Iterator</code> are unequal to those of another. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.ne">Read more</a></p> +</div><h4 id='method.lt' class='method'><span id='lt.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.lt' class='fnname'>lt</a><I>(self, other: I) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a>, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html' title='core::cmp::PartialOrd'>PartialOrd</a><I::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.5.0'>1.5.0</div></span></h4> +<div class='docblock'><p>Determines if the elements of this <code>Iterator</code> are lexicographically less than those of another. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.lt">Read more</a></p> +</div><h4 id='method.le' class='method'><span id='le.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.le' class='fnname'>le</a><I>(self, other: I) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a>, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html' title='core::cmp::PartialOrd'>PartialOrd</a><I::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.5.0'>1.5.0</div></span></h4> +<div class='docblock'><p>Determines if the elements of this <code>Iterator</code> are lexicographically less or equal to those of another. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.le">Read more</a></p> +</div><h4 id='method.gt' class='method'><span id='gt.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.gt' class='fnname'>gt</a><I>(self, other: I) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a>, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html' title='core::cmp::PartialOrd'>PartialOrd</a><I::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.5.0'>1.5.0</div></span></h4> +<div class='docblock'><p>Determines if the elements of this <code>Iterator</code> are lexicographically greater than those of another. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.gt">Read more</a></p> +</div><h4 id='method.ge' class='method'><span id='ge.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.ge' class='fnname'>ge</a><I>(self, other: I) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a>, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html' title='core::cmp::PartialOrd'>PartialOrd</a><I::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.5.0'>1.5.0</div></span></h4> +<div class='docblock'><p>Determines if the elements of this <code>Iterator</code> are lexicographically greater than or equal to those of another. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.ge">Read more</a></p> +</div></div></section> + <section id='search' class="content hidden"></section> + + <section class="footer"></section> + + <aside id="help" class="hidden"> + <div> + <h1 class="hidden">Help</h1> + + <div class="shortcuts"> + <h2>Keyboard Shortcuts</h2> + + <dl> + <dt>?</dt> + <dd>Show this help dialog</dd> + <dt>S</dt> + <dd>Focus the search field</dd> + <dt>⇤</dt> + <dd>Move up in search results</dd> + <dt>⇥</dt> + <dd>Move down in search results</dd> + <dt>⏎</dt> + <dd>Go to active search result</dd> + <dt>+</dt> + <dd>Collapse/expand all sections</dd> + </dl> + </div> + + <div class="infos"> + <h2>Search Tricks</h2> + + <p> + Prefix searches with a type followed by a colon (e.g. + <code>fn:</code>) to restrict the search to a given type. + </p> + + <p> + Accepted types are: <code>fn</code>, <code>mod</code>, + <code>struct</code>, <code>enum</code>, + <code>trait</code>, <code>type</code>, <code>macro</code>, + and <code>const</code>. + </p> + + <p> + Search functions by type signature (e.g. + <code>vec -> usize</code> or <code>* -> vec</code>) + </p> + </div> + </div> + </aside> + + + + <script> + window.rootPath = "../../"; + window.currentCrate = "plist"; + </script> + <script src="../../jquery.js"></script> + <script src="../../main.js"></script> + <script defer src="../../search-index.js"></script> +</body> +</html>
\ No newline at end of file diff --git a/plist/de/Deserializer.t.html b/plist/de/Deserializer.t.html new file mode 100644 index 0000000..0b61b98 --- /dev/null +++ b/plist/de/Deserializer.t.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta http-equiv="refresh" content="0;URL=struct.Deserializer.html"> +</head> +<body> + <p>Redirecting to <a href="struct.Deserializer.html">struct.Deserializer.html</a>...</p> + <script>location.replace("struct.Deserializer.html" + location.search + location.hash);</script> +</body> +</html>
\ No newline at end of file diff --git a/plist/de/struct.Deserializer.html b/plist/de/struct.Deserializer.html new file mode 100644 index 0000000..ca52c2c --- /dev/null +++ b/plist/de/struct.Deserializer.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta http-equiv="refresh" content="0;URL=../../plist/struct.Deserializer.html"> +</head> +<body> + <p>Redirecting to <a href="../../plist/struct.Deserializer.html">../../plist/struct.Deserializer.html</a>...</p> + <script>location.replace("../../plist/struct.Deserializer.html" + location.search + location.hash);</script> +</body> +</html>
\ No newline at end of file diff --git a/plist/deserialize.v.html b/plist/deserialize.v.html new file mode 100644 index 0000000..1bb9722 --- /dev/null +++ b/plist/deserialize.v.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta http-equiv="refresh" content="0;URL=fn.deserialize.html"> +</head> +<body> + <p>Redirecting to <a href="fn.deserialize.html">fn.deserialize.html</a>...</p> + <script>location.replace("fn.deserialize.html" + location.search + location.hash);</script> +</body> +</html>
\ No newline at end of file diff --git a/plist/enum.Error.html b/plist/enum.Error.html new file mode 100644 index 0000000..ca7ab87 --- /dev/null +++ b/plist/enum.Error.html @@ -0,0 +1,168 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="generator" content="rustdoc"> + <meta name="description" content="API documentation for the Rust `Error` enum in crate `plist`."> + <meta name="keywords" content="rust, rustlang, rust-lang, Error"> + + <title>plist::Error - Rust</title> + + <link rel="stylesheet" type="text/css" href="../rustdoc.css"> + <link rel="stylesheet" type="text/css" href="../main.css"> + + + + +</head> +<body class="rustdoc"> + <!--[if lte IE 8]> + <div class="warning"> + This old browser is unsupported and will most likely display funky + things. + </div> + <![endif]--> + + + + <nav class="sidebar"> + + <p class='location'><a href='index.html'>plist</a></p><script>window.sidebarCurrent = {name: 'Error', ty: 'enum', relpath: ''};</script><script defer src="sidebar-items.js"></script> + </nav> + + <nav class="sub"> + <form class="search-form js-only"> + <div class="search-container"> + <input class="search-input" name="search" + autocomplete="off" + placeholder="Click or press ‘S’ to search, ‘?’ for more options…" + type="search"> + </div> + </form> + </nav> + + <section id='main' class="content enum"> +<h1 class='fqn'><span class='in-band'>Enum <a href='index.html'>plist</a>::<wbr><a class='enum' href=''>Error</a></span><span class='out-of-band'><span id='render-detail'> + <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs"> + [<span class='inner'>−</span>] + </a> + </span><a id='src-1214' class='srclink' href='../src/plist/src/lib.rs.html#409-414' title='goto source code'>[src]</a></span></h1> +<pre class='rust enum'>pub enum Error { + InvalidData, + UnexpectedEof, + Io(<a class='struct' href='https://doc.rust-lang.org/nightly/std/io/error/struct.Error.html' title='std::io::error::Error'>IoError</a>), + Serde(<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.String.html' title='collections::string::String'>String</a>), +}</pre><h2 class='variants'>Variants</h2> +<span id='variant.InvalidData' class='variant'><span id='InvalidData.v' class='invisible'><code>InvalidData</code></span></span><span id='variant.UnexpectedEof' class='variant'><span id='UnexpectedEof.v' class='invisible'><code>UnexpectedEof</code></span></span><span id='variant.Io' class='variant'><span id='Io.v' class='invisible'><code>Io(<a class='struct' href='https://doc.rust-lang.org/nightly/std/io/error/struct.Error.html' title='std::io::error::Error'>IoError</a>)</code></span></span><span id='variant.Serde' class='variant'><span id='Serde.v' class='invisible'><code>Serde(<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.String.html' title='collections::string::String'>String</a>)</code></span></span><h2 id='implementations'>Trait Implementations</h2><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.FromUtf8Error.html' title='collections::string::FromUtf8Error'>FromUtf8Error</a>> for <a class='enum' href='../plist/enum.Error.html' title='plist::Error'>Error</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-16' class='srclink' href='../src/plist/src/binary/reader.rs.html#8-12' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from' class='method'><span id='from.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(_: <a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.FromUtf8Error.html' title='collections::string::FromUtf8Error'>FromUtf8Error</a>) -> <a class='enum' href='../plist/enum.Error.html' title='plist::Error'>Error</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.FromUtf16Error.html' title='collections::string::FromUtf16Error'>FromUtf16Error</a>> for <a class='enum' href='../plist/enum.Error.html' title='plist::Error'>Error</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-18' class='srclink' href='../src/plist/src/binary/reader.rs.html#14-18' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from-1' class='method'><span id='from.v-1' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(_: <a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.FromUtf16Error.html' title='collections::string::FromUtf16Error'>FromUtf16Error</a>) -> <a class='enum' href='../plist/enum.Error.html' title='plist::Error'>Error</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='struct' href='https://lifthrasiir.github.io/rust-chrono/chrono/format/struct.ParseError.html' title='chrono::format::ParseError'>ChronoParseError</a>> for <a class='enum' href='../plist/enum.Error.html' title='plist::Error'>Error</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-132' class='srclink' href='../src/plist/src/xml/reader.rs.html#10-14' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from-2' class='method'><span id='from.v-2' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(_: <a class='struct' href='https://lifthrasiir.github.io/rust-chrono/chrono/format/struct.ParseError.html' title='chrono::format::ParseError'>ChronoParseError</a>) -> <a class='enum' href='../plist/enum.Error.html' title='plist::Error'>Error</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><XmlWriterError> for <a class='enum' href='../plist/enum.Error.html' title='plist::Error'>Error</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-197' class='srclink' href='../src/plist/src/xml/writer.rs.html#12-19' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from-3' class='method'><span id='from.v-3' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(err: XmlWriterError) -> <a class='enum' href='../plist/enum.Error.html' title='plist::Error'>Error</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Error.html' title='serde::de::Error'>SerdeError</a> for <a class='enum' href='../plist/enum.Error.html' title='plist::Error'>Error</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-304' class='srclink' href='../src/plist/src/de.rs.html#41-49' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.custom' class='method'><span id='custom.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Error.html#tymethod.custom' class='fnname'>custom</a><T: <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.Into.html' title='core::convert::Into'>Into</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.String.html' title='collections::string::String'>String</a>>>(msg: T) -> Self</code></span></h4> +<div class='docblock'><p>Raised when there is general error when deserializing a type.</p> +</div><h4 id='method.end_of_stream' class='method'><span id='end_of_stream.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Error.html#tymethod.end_of_stream' class='fnname'>end_of_stream</a>() -> Self</code></span></h4> +<div class='docblock'><p>Raised when a <code>Deserialize</code> type unexpectedly hit the end of the stream.</p> +</div><h4 id='method.invalid_type' class='method'><span id='invalid_type.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Error.html#method.invalid_type' class='fnname'>invalid_type</a>(ty: <a class='enum' href='https://serde-rs.github.io/serde/serde/serde/de/enum.Type.html' title='serde::de::Type'>Type</a>) -> Self</code></span></h4> +<div class='docblock'><p>Raised when a <code>Deserialize</code> was passed an incorrect type.</p> +</div><h4 id='method.invalid_value' class='method'><span id='invalid_value.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Error.html#method.invalid_value' class='fnname'>invalid_value</a>(msg: &<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>) -> Self</code></span></h4> +<div class='docblock'><p>Raised when a <code>Deserialize</code> was passed an incorrect value.</p> +</div><h4 id='method.invalid_length' class='method'><span id='invalid_length.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Error.html#method.invalid_length' class='fnname'>invalid_length</a>(len: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>) -> Self</code></span></h4> +<div class='docblock'><p>Raised when a fixed sized sequence or map was passed in the wrong amount of arguments. <a href="https://serde-rs.github.io/serde/serde/serde/de/trait.Error.html#method.invalid_length">Read more</a></p> +</div><h4 id='method.unknown_variant' class='method'><span id='unknown_variant.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Error.html#method.unknown_variant' class='fnname'>unknown_variant</a>(field: &<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>) -> Self</code></span></h4> +<div class='docblock'><p>Raised when a <code>Deserialize</code> enum type received an unexpected variant.</p> +</div><h4 id='method.unknown_field' class='method'><span id='unknown_field.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Error.html#method.unknown_field' class='fnname'>unknown_field</a>(field: &<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>) -> Self</code></span></h4> +<div class='docblock'><p>Raised when a <code>Deserialize</code> struct type received an unexpected struct field.</p> +</div><h4 id='method.missing_field' class='method'><span id='missing_field.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Error.html#method.missing_field' class='fnname'>missing_field</a>(field: &'static <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>) -> Self</code></span></h4> +<div class='docblock'><p>raised when a <code>deserialize</code> struct type did not receive a field.</p> +</div><h4 id='method.duplicate_field' class='method'><span id='duplicate_field.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Error.html#method.duplicate_field' class='fnname'>duplicate_field</a>(field: &'static <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>) -> Self</code></span></h4> +<div class='docblock'><p>Raised when a <code>Deserialize</code> struct type received more than one of the same struct field. <a href="https://serde-rs.github.io/serde/serde/serde/de/trait.Error.html#method.duplicate_field">Read more</a></p> +</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Error.html' title='serde::ser::Error'>SerdeError</a> for <a class='enum' href='../plist/enum.Error.html' title='plist::Error'>Error</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-428' class='srclink' href='../src/plist/src/ser.rs.html#8-16' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.custom-1' class='method'><span id='custom.v-1' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Error.html#tymethod.custom' class='fnname'>custom</a><T: <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.Into.html' title='core::convert::Into'>Into</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.String.html' title='collections::string::String'>String</a>>>(msg: T) -> Self</code></span></h4> +<div class='docblock'><p>Raised when there is general error when deserializing a type.</p> +</div><h4 id='method.invalid_value-1' class='method'><span id='invalid_value.v-1' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Error.html#method.invalid_value' class='fnname'>invalid_value</a>(_: &<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>) -> Self</code></span></h4> +<div class='docblock'><p>Raised when a <code>Serialize</code> was passed an incorrect value.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html' title='core::fmt::Debug'>Debug</a> for <a class='enum' href='../plist/enum.Error.html' title='plist::Error'>Error</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-1221' class='srclink' href='../src/plist/src/lib.rs.html#408' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.fmt' class='method'><span id='fmt.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html#tymethod.fmt' class='fnname'>fmt</a>(&self, __arg_0: &mut <a class='struct' href='https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html' title='core::fmt::Formatter'>Formatter</a>) -> <a class='type' href='https://doc.rust-lang.org/nightly/core/fmt/type.Result.html' title='core::fmt::Result'>Result</a></code></span></h4> +<div class='docblock'><p>Formats the value using the given formatter.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/std/error/trait.Error.html' title='std::error::Error'>Error</a> for <a class='enum' href='../plist/enum.Error.html' title='plist::Error'>Error</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-742' class='srclink' href='../src/plist/src/lib.rs.html#416-432' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.description' class='method'><span id='description.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/std/error/trait.Error.html#tymethod.description' class='fnname'>description</a>(&self) -> &<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a></code></span></h4> +<div class='docblock'><p>A short description of the error. <a href="https://doc.rust-lang.org/nightly/std/error/trait.Error.html#tymethod.description">Read more</a></p> +</div><h4 id='method.cause' class='method'><span id='cause.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/std/error/trait.Error.html#method.cause' class='fnname'>cause</a>(&self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><&<a class='trait' href='https://doc.rust-lang.org/nightly/std/error/trait.Error.html' title='std::error::Error'>Error</a>></code></span></h4> +<div class='docblock'><p>The lower-level cause of this error, if any. <a href="https://doc.rust-lang.org/nightly/std/error/trait.Error.html#method.cause">Read more</a></p> +</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html' title='core::fmt::Display'>Display</a> for <a class='enum' href='../plist/enum.Error.html' title='plist::Error'>Error</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-750' class='srclink' href='../src/plist/src/lib.rs.html#434-441' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.fmt-1' class='method'><span id='fmt.v-1' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/fmt/trait.Display.html#tymethod.fmt' class='fnname'>fmt</a>(&self, fmt: &mut <a class='struct' href='https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html' title='core::fmt::Formatter'>Formatter</a>) -> <a class='type' href='https://doc.rust-lang.org/nightly/core/fmt/type.Result.html' title='core::fmt::Result'>Result</a></code></span></h4> +<div class='docblock'><p>Formats the value using the given formatter.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='struct' href='https://doc.rust-lang.org/nightly/std/io/error/struct.Error.html' title='std::io::error::Error'>IoError</a>> for <a class='enum' href='../plist/enum.Error.html' title='plist::Error'>Error</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-755' class='srclink' href='../src/plist/src/lib.rs.html#443-447' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from-4' class='method'><span id='from.v-4' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(err: <a class='struct' href='https://doc.rust-lang.org/nightly/std/io/error/struct.Error.html' title='std::io::error::Error'>IoError</a>) -> <a class='enum' href='../plist/enum.Error.html' title='plist::Error'>Error</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div></section> + <section id='search' class="content hidden"></section> + + <section class="footer"></section> + + <aside id="help" class="hidden"> + <div> + <h1 class="hidden">Help</h1> + + <div class="shortcuts"> + <h2>Keyboard Shortcuts</h2> + + <dl> + <dt>?</dt> + <dd>Show this help dialog</dd> + <dt>S</dt> + <dd>Focus the search field</dd> + <dt>⇤</dt> + <dd>Move up in search results</dd> + <dt>⇥</dt> + <dd>Move down in search results</dd> + <dt>⏎</dt> + <dd>Go to active search result</dd> + <dt>+</dt> + <dd>Collapse/expand all sections</dd> + </dl> + </div> + + <div class="infos"> + <h2>Search Tricks</h2> + + <p> + Prefix searches with a type followed by a colon (e.g. + <code>fn:</code>) to restrict the search to a given type. + </p> + + <p> + Accepted types are: <code>fn</code>, <code>mod</code>, + <code>struct</code>, <code>enum</code>, + <code>trait</code>, <code>type</code>, <code>macro</code>, + and <code>const</code>. + </p> + + <p> + Search functions by type signature (e.g. + <code>vec -> usize</code> or <code>* -> vec</code>) + </p> + </div> + </div> + </aside> + + + + <script> + window.rootPath = "../"; + window.currentCrate = "plist"; + </script> + <script src="../jquery.js"></script> + <script src="../main.js"></script> + <script defer src="../search-index.js"></script> +</body> +</html>
\ No newline at end of file diff --git a/plist/enum.Plist.html b/plist/enum.Plist.html new file mode 100644 index 0000000..39fe265 --- /dev/null +++ b/plist/enum.Plist.html @@ -0,0 +1,261 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="generator" content="rustdoc"> + <meta name="description" content="API documentation for the Rust `Plist` enum in crate `plist`."> + <meta name="keywords" content="rust, rustlang, rust-lang, Plist"> + + <title>plist::Plist - Rust</title> + + <link rel="stylesheet" type="text/css" href="../rustdoc.css"> + <link rel="stylesheet" type="text/css" href="../main.css"> + + + + +</head> +<body class="rustdoc"> + <!--[if lte IE 8]> + <div class="warning"> + This old browser is unsupported and will most likely display funky + things. + </div> + <![endif]--> + + + + <nav class="sidebar"> + + <p class='location'><a href='index.html'>plist</a></p><script>window.sidebarCurrent = {name: 'Plist', ty: 'enum', relpath: ''};</script><script defer src="sidebar-items.js"></script> + </nav> + + <nav class="sub"> + <form class="search-form js-only"> + <div class="search-container"> + <input class="search-input" name="search" + autocomplete="off" + placeholder="Click or press ‘S’ to search, ‘?’ for more options…" + type="search"> + </div> + </form> + </nav> + + <section id='main' class="content enum"> +<h1 class='fqn'><span class='in-band'>Enum <a href='index.html'>plist</a>::<wbr><a class='enum' href=''>Plist</a></span><span class='out-of-band'><span id='render-detail'> + <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs"> + [<span class='inner'>−</span>] + </a> + </span><a id='src-1028' class='srclink' href='../src/plist/src/lib.rs.html#74-83' title='goto source code'>[src]</a></span></h1> +<pre class='rust enum'>pub enum Plist { + Array(<a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a><<a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a>>), + Dictionary(<a class='struct' href='https://doc.rust-lang.org/nightly/collections/btree/map/struct.BTreeMap.html' title='collections::btree::map::BTreeMap'>BTreeMap</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.String.html' title='collections::string::String'>String</a>, <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a>>), + Boolean(<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a>), + Data(<a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a>>), + Date(<a class='struct' href='https://lifthrasiir.github.io/rust-chrono/chrono/datetime/struct.DateTime.html' title='chrono::datetime::DateTime'>DateTime</a><<a class='struct' href='https://lifthrasiir.github.io/rust-chrono/chrono/offset/utc/struct.UTC.html' title='chrono::offset::utc::UTC'>UTC</a>>), + Real(<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.f64.html'>f64</a>), + Integer(<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i64.html'>i64</a>), + String(<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.String.html' title='collections::string::String'>String</a>), +}</pre><h2 class='variants'>Variants</h2> +<span id='variant.Array' class='variant'><span id='Array.v' class='invisible'><code>Array(<a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a><<a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a>>)</code></span></span><span id='variant.Dictionary' class='variant'><span id='Dictionary.v' class='invisible'><code>Dictionary(<a class='struct' href='https://doc.rust-lang.org/nightly/collections/btree/map/struct.BTreeMap.html' title='collections::btree::map::BTreeMap'>BTreeMap</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.String.html' title='collections::string::String'>String</a>, <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a>>)</code></span></span><span id='variant.Boolean' class='variant'><span id='Boolean.v' class='invisible'><code>Boolean(<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a>)</code></span></span><span id='variant.Data' class='variant'><span id='Data.v' class='invisible'><code>Data(<a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a>>)</code></span></span><span id='variant.Date' class='variant'><span id='Date.v' class='invisible'><code>Date(<a class='struct' href='https://lifthrasiir.github.io/rust-chrono/chrono/datetime/struct.DateTime.html' title='chrono::datetime::DateTime'>DateTime</a><<a class='struct' href='https://lifthrasiir.github.io/rust-chrono/chrono/offset/utc/struct.UTC.html' title='chrono::offset::utc::UTC'>UTC</a>>)</code></span></span><span id='variant.Real' class='variant'><span id='Real.v' class='invisible'><code>Real(<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.f64.html'>f64</a>)</code></span></span><span id='variant.Integer' class='variant'><span id='Integer.v' class='invisible'><code>Integer(<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i64.html'>i64</a>)</code></span></span><span id='variant.String' class='variant'><span id='String.v' class='invisible'><code>String(<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.String.html' title='collections::string::String'>String</a>)</code></span></span><h2 id='methods'>Methods</h2><h3 class='impl'><span class='in-band'><code>impl <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-571' class='srclink' href='../src/plist/src/lib.rs.html#88-152' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.read' class='method'><span id='read.v' class='invisible'><code>fn <a href='#method.read' class='fnname'>read</a><R: <a class='trait' href='https://doc.rust-lang.org/nightly/std/io/trait.Read.html' title='std::io::Read'>Read</a> + <a class='trait' href='https://doc.rust-lang.org/nightly/std/io/trait.Seek.html' title='std::io::Seek'>Seek</a>>(reader: R) -> <a class='type' href='../plist/type.Result.html' title='plist::Result'>Result</a><<a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a>></code></span></h4> +<h4 id='method.from_events' class='method'><span id='from_events.v' class='invisible'><code>fn <a href='#method.from_events' class='fnname'>from_events</a><T>(events: T) -> <a class='type' href='../plist/type.Result.html' title='plist::Result'>Result</a><<a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a>> <span class='where'>where T: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a><Item=<a class='type' href='../plist/type.Result.html' title='plist::Result'>Result</a><<a class='enum' href='../plist/enum.PlistEvent.html' title='plist::PlistEvent'>PlistEvent</a>>></span></code></span></h4> +<h4 id='method.into_events' class='method'><span id='into_events.v' class='invisible'><code>fn <a href='#method.into_events' class='fnname'>into_events</a>(self) -> <a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a><<a class='enum' href='../plist/enum.PlistEvent.html' title='plist::PlistEvent'>PlistEvent</a>></code></span></h4> +<h4 id='method.into_rustc_serialize_json' class='method'><span id='into_rustc_serialize_json.v' class='invisible'><code>fn <a href='#method.into_rustc_serialize_json' class='fnname'>into_rustc_serialize_json</a>(self) -> <a class='enum' href='https://doc.rust-lang.org/rustc-serialize/rustc_serialize/json/enum.Json.html' title='rustc_serialize::json::Json'>RustcJson</a></code></span></h4> +</div><h3 class='impl'><span class='in-band'><code>impl <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-613' class='srclink' href='../src/plist/src/lib.rs.html#154-268' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.as_array' class='method'><span id='as_array.v' class='invisible'><code>fn <a href='#method.as_array' class='fnname'>as_array</a>(&self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><&<a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a><<a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a>>></code></span></h4> +<div class='docblock'><p>If the <code>Plist</code> is an Array, returns the associated Vec. +Returns None otherwise.</p> +</div><h4 id='method.as_array_mut' class='method'><span id='as_array_mut.v' class='invisible'><code>fn <a href='#method.as_array_mut' class='fnname'>as_array_mut</a>(&mut self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><&mut <a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a><<a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a>>></code></span></h4> +<div class='docblock'><p>If the <code>Plist</code> is an Array, returns the associated mutable Vec. +Returns None otherwise.</p> +</div><h4 id='method.as_dictionary' class='method'><span id='as_dictionary.v' class='invisible'><code>fn <a href='#method.as_dictionary' class='fnname'>as_dictionary</a>(&self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><&<a class='struct' href='https://doc.rust-lang.org/nightly/collections/btree/map/struct.BTreeMap.html' title='collections::btree::map::BTreeMap'>BTreeMap</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.String.html' title='collections::string::String'>String</a>, <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a>>></code></span></h4> +<div class='docblock'><p>If the <code>Plist</code> is a Dictionary, returns the associated BTreeMap. +Returns None otherwise.</p> +</div><h4 id='method.as_dictionary_mut' class='method'><span id='as_dictionary_mut.v' class='invisible'><code>fn <a href='#method.as_dictionary_mut' class='fnname'>as_dictionary_mut</a>(&mut self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><&mut <a class='struct' href='https://doc.rust-lang.org/nightly/collections/btree/map/struct.BTreeMap.html' title='collections::btree::map::BTreeMap'>BTreeMap</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.String.html' title='collections::string::String'>String</a>, <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a>>></code></span></h4> +<div class='docblock'><p>If the <code>Plist</code> is a Dictionary, returns the associated mutable BTreeMap. +Returns None otherwise.</p> +</div><h4 id='method.as_boolean' class='method'><span id='as_boolean.v' class='invisible'><code>fn <a href='#method.as_boolean' class='fnname'>as_boolean</a>(&self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a>></code></span></h4> +<div class='docblock'><p>If the <code>Plist</code> is a Boolean, returns the associated bool. +Returns None otherwise.</p> +</div><h4 id='method.into_data' class='method'><span id='into_data.v' class='invisible'><code>fn <a href='#method.into_data' class='fnname'>into_data</a>(self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a>>></code></span></h4> +<div class='docblock'><p>If the <code>Plist</code> is a Data, returns the underlying Vec. +Returns None otherwise.</p> + +<p>This method consumes the <code>Plist</code>. If this is not desired, please use +<code>as_data</code> method.</p> +</div><h4 id='method.as_data' class='method'><span id='as_data.v' class='invisible'><code>fn <a href='#method.as_data' class='fnname'>as_data</a>(&self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.slice.html'>&[</a><a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a><a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.slice.html'>]</a>></code></span></h4> +<div class='docblock'><p>If the <code>Plist</code> is a Data, returns the associated Vec. +Returns None otherwise.</p> +</div><h4 id='method.as_date' class='method'><span id='as_date.v' class='invisible'><code>fn <a href='#method.as_date' class='fnname'>as_date</a>(&self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><<a class='struct' href='https://lifthrasiir.github.io/rust-chrono/chrono/datetime/struct.DateTime.html' title='chrono::datetime::DateTime'>DateTime</a><<a class='struct' href='https://lifthrasiir.github.io/rust-chrono/chrono/offset/utc/struct.UTC.html' title='chrono::offset::utc::UTC'>UTC</a>>></code></span></h4> +<div class='docblock'><p>If the <code>Plist</code> is a Date, returns the associated DateTime. +Returns None otherwise.</p> +</div><h4 id='method.as_real' class='method'><span id='as_real.v' class='invisible'><code>fn <a href='#method.as_real' class='fnname'>as_real</a>(&self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.f64.html'>f64</a>></code></span></h4> +<div class='docblock'><p>If the <code>Plist</code> is a Real, returns the associated f64. +Returns None otherwise.</p> +</div><h4 id='method.as_integer' class='method'><span id='as_integer.v' class='invisible'><code>fn <a href='#method.as_integer' class='fnname'>as_integer</a>(&self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i64.html'>i64</a>></code></span></h4> +<div class='docblock'><p>If the <code>Plist</code> is an Integer, returns the associated i64. +Returns None otherwise.</p> +</div><h4 id='method.into_string' class='method'><span id='into_string.v' class='invisible'><code>fn <a href='#method.into_string' class='fnname'>into_string</a>(self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.String.html' title='collections::string::String'>String</a>></code></span></h4> +<div class='docblock'><p>If the <code>Plist</code> is a String, returns the underlying String. +Returns None otherwise.</p> + +<p>This method consumes the <code>Plist</code>. If this is not desired, please use +<code>as_string</code> method.</p> +</div><h4 id='method.as_string' class='method'><span id='as_string.v' class='invisible'><code>fn <a href='#method.as_string' class='fnname'>as_string</a>(&self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><&<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>></code></span></h4> +<div class='docblock'><p>If the <code>Plist</code> is a String, returns the associated str. +Returns None otherwise.</p> +</div></div><h2 id='implementations'>Trait Implementations</h2><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html' title='core::clone::Clone'>Clone</a> for <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-1045' class='srclink' href='../src/plist/src/lib.rs.html#73' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.clone' class='method'><span id='clone.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#tymethod.clone' class='fnname'>clone</a>(&self) -> <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span></h4> +<div class='docblock'><p>Returns a copy of the value. <a href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#tymethod.clone">Read more</a></p> +</div><h4 id='method.clone_from' class='method'><span id='clone_from.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#method.clone_from' class='fnname'>clone_from</a>(&mut self, source: &Self)</code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Performs copy-assignment from <code>source</code>. <a href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#method.clone_from">Read more</a></p> +</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html' title='core::fmt::Debug'>Debug</a> for <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-1056' class='srclink' href='../src/plist/src/lib.rs.html#73' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.fmt' class='method'><span id='fmt.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html#tymethod.fmt' class='fnname'>fmt</a>(&self, __arg_0: &mut <a class='struct' href='https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html' title='core::fmt::Formatter'>Formatter</a>) -> <a class='type' href='https://doc.rust-lang.org/nightly/core/fmt/type.Result.html' title='core::fmt::Result'>Result</a></code></span></h4> +<div class='docblock'><p>Formats the value using the given formatter.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html' title='core::cmp::PartialEq'>PartialEq</a> for <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-1076' class='srclink' href='../src/plist/src/lib.rs.html#73' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.eq' class='method'><span id='eq.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#tymethod.eq' class='fnname'>eq</a>(&self, __arg_0: &<a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></code></span></h4> +<div class='docblock'><p>This method tests for <code>self</code> and <code>other</code> values to be equal, and is used by <code>==</code>. <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#tymethod.eq">Read more</a></p> +</div><h4 id='method.ne' class='method'><span id='ne.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne' class='fnname'>ne</a>(&self, __arg_0: &<a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></code></span></h4> +<div class='docblock'><p>This method tests for <code>!=</code>.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a><<a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a>>> for <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-650' class='srclink' href='../src/plist/src/lib.rs.html#270-272' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from' class='method'><span id='from.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(from: <a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a><<a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a>>) -> <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/btree/map/struct.BTreeMap.html' title='collections::btree::map::BTreeMap'>BTreeMap</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.String.html' title='collections::string::String'>String</a>, <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a>>> for <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-653' class='srclink' href='../src/plist/src/lib.rs.html#274-276' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from-1' class='method'><span id='from.v-1' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(from: <a class='struct' href='https://doc.rust-lang.org/nightly/collections/btree/map/struct.BTreeMap.html' title='collections::btree::map::BTreeMap'>BTreeMap</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.String.html' title='collections::string::String'>String</a>, <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a>>) -> <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a>> for <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-656' class='srclink' href='../src/plist/src/lib.rs.html#278-280' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from-2' class='method'><span id='from.v-2' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(from: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a>) -> <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl<'a> <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><&'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a>> for <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-659' class='srclink' href='../src/plist/src/lib.rs.html#282-284' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from-3' class='method'><span id='from.v-3' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(from: &'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a>) -> <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='struct' href='https://lifthrasiir.github.io/rust-chrono/chrono/datetime/struct.DateTime.html' title='chrono::datetime::DateTime'>DateTime</a><<a class='struct' href='https://lifthrasiir.github.io/rust-chrono/chrono/offset/utc/struct.UTC.html' title='chrono::offset::utc::UTC'>UTC</a>>> for <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-663' class='srclink' href='../src/plist/src/lib.rs.html#286-288' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from-4' class='method'><span id='from.v-4' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(from: <a class='struct' href='https://lifthrasiir.github.io/rust-chrono/chrono/datetime/struct.DateTime.html' title='chrono::datetime::DateTime'>DateTime</a><<a class='struct' href='https://lifthrasiir.github.io/rust-chrono/chrono/offset/utc/struct.UTC.html' title='chrono::offset::utc::UTC'>UTC</a>>) -> <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl<'a> <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><&'a <a class='struct' href='https://lifthrasiir.github.io/rust-chrono/chrono/datetime/struct.DateTime.html' title='chrono::datetime::DateTime'>DateTime</a><<a class='struct' href='https://lifthrasiir.github.io/rust-chrono/chrono/offset/utc/struct.UTC.html' title='chrono::offset::utc::UTC'>UTC</a>>> for <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-666' class='srclink' href='../src/plist/src/lib.rs.html#290-292' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from-5' class='method'><span id='from.v-5' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(from: &'a <a class='struct' href='https://lifthrasiir.github.io/rust-chrono/chrono/datetime/struct.DateTime.html' title='chrono::datetime::DateTime'>DateTime</a><<a class='struct' href='https://lifthrasiir.github.io/rust-chrono/chrono/offset/utc/struct.UTC.html' title='chrono::offset::utc::UTC'>UTC</a>>) -> <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.f64.html'>f64</a>> for <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-670' class='srclink' href='../src/plist/src/lib.rs.html#294-296' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from-6' class='method'><span id='from.v-6' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(from: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.f64.html'>f64</a>) -> <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.f32.html'>f32</a>> for <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-673' class='srclink' href='../src/plist/src/lib.rs.html#298-300' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from-7' class='method'><span id='from.v-7' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(from: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.f32.html'>f32</a>) -> <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i64.html'>i64</a>> for <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-676' class='srclink' href='../src/plist/src/lib.rs.html#302-304' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from-8' class='method'><span id='from.v-8' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(from: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i64.html'>i64</a>) -> <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i32.html'>i32</a>> for <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-679' class='srclink' href='../src/plist/src/lib.rs.html#306-308' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from-9' class='method'><span id='from.v-9' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(from: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i32.html'>i32</a>) -> <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i16.html'>i16</a>> for <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-682' class='srclink' href='../src/plist/src/lib.rs.html#310-312' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from-10' class='method'><span id='from.v-10' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(from: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i16.html'>i16</a>) -> <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i8.html'>i8</a>> for <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-685' class='srclink' href='../src/plist/src/lib.rs.html#314-316' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from-11' class='method'><span id='from.v-11' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(from: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i8.html'>i8</a>) -> <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u32.html'>u32</a>> for <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-688' class='srclink' href='../src/plist/src/lib.rs.html#318-320' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from-12' class='method'><span id='from.v-12' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(from: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u32.html'>u32</a>) -> <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u16.html'>u16</a>> for <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-691' class='srclink' href='../src/plist/src/lib.rs.html#322-324' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from-13' class='method'><span id='from.v-13' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(from: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u16.html'>u16</a>) -> <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a>> for <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-694' class='srclink' href='../src/plist/src/lib.rs.html#326-328' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from-14' class='method'><span id='from.v-14' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(from: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a>) -> <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl<'a> <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><&'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.f64.html'>f64</a>> for <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-697' class='srclink' href='../src/plist/src/lib.rs.html#330-332' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from-15' class='method'><span id='from.v-15' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(from: &'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.f64.html'>f64</a>) -> <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl<'a> <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><&'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.f32.html'>f32</a>> for <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-701' class='srclink' href='../src/plist/src/lib.rs.html#334-336' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from-16' class='method'><span id='from.v-16' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(from: &'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.f32.html'>f32</a>) -> <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl<'a> <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><&'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i64.html'>i64</a>> for <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-705' class='srclink' href='../src/plist/src/lib.rs.html#338-340' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from-17' class='method'><span id='from.v-17' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(from: &'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i64.html'>i64</a>) -> <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl<'a> <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><&'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i32.html'>i32</a>> for <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-709' class='srclink' href='../src/plist/src/lib.rs.html#342-344' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from-18' class='method'><span id='from.v-18' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(from: &'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i32.html'>i32</a>) -> <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl<'a> <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><&'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i16.html'>i16</a>> for <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-713' class='srclink' href='../src/plist/src/lib.rs.html#346-348' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from-19' class='method'><span id='from.v-19' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(from: &'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i16.html'>i16</a>) -> <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl<'a> <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><&'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i8.html'>i8</a>> for <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-717' class='srclink' href='../src/plist/src/lib.rs.html#350-352' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from-20' class='method'><span id='from.v-20' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(from: &'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i8.html'>i8</a>) -> <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl<'a> <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><&'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u32.html'>u32</a>> for <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-721' class='srclink' href='../src/plist/src/lib.rs.html#354-356' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from-21' class='method'><span id='from.v-21' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(from: &'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u32.html'>u32</a>) -> <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl<'a> <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><&'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u16.html'>u16</a>> for <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-725' class='srclink' href='../src/plist/src/lib.rs.html#358-360' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from-22' class='method'><span id='from.v-22' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(from: &'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u16.html'>u16</a>) -> <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl<'a> <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><&'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a>> for <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-729' class='srclink' href='../src/plist/src/lib.rs.html#362-364' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from-23' class='method'><span id='from.v-23' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(from: &'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a>) -> <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.String.html' title='collections::string::String'>String</a>> for <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-733' class='srclink' href='../src/plist/src/lib.rs.html#366-368' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from-24' class='method'><span id='from.v-24' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(from: <a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.String.html' title='collections::string::String'>String</a>) -> <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl<'a> <a class='trait' href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html' title='core::convert::From'>From</a><&'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>> for <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-736' class='srclink' href='../src/plist/src/lib.rs.html#370-372' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.from-25' class='method'><span id='from.v-25' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/convert/trait.From.html#tymethod.from' class='fnname'>from</a>(from: &'a <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>) -> <a class='enum' href='../plist/enum.Plist.html' title='plist::Plist'>Plist</a></code></span></h4> +<div class='docblock'><p>Performs the conversion.</p> +</div></div></section> + <section id='search' class="content hidden"></section> + + <section class="footer"></section> + + <aside id="help" class="hidden"> + <div> + <h1 class="hidden">Help</h1> + + <div class="shortcuts"> + <h2>Keyboard Shortcuts</h2> + + <dl> + <dt>?</dt> + <dd>Show this help dialog</dd> + <dt>S</dt> + <dd>Focus the search field</dd> + <dt>⇤</dt> + <dd>Move up in search results</dd> + <dt>⇥</dt> + <dd>Move down in search results</dd> + <dt>⏎</dt> + <dd>Go to active search result</dd> + <dt>+</dt> + <dd>Collapse/expand all sections</dd> + </dl> + </div> + + <div class="infos"> + <h2>Search Tricks</h2> + + <p> + Prefix searches with a type followed by a colon (e.g. + <code>fn:</code>) to restrict the search to a given type. + </p> + + <p> + Accepted types are: <code>fn</code>, <code>mod</code>, + <code>struct</code>, <code>enum</code>, + <code>trait</code>, <code>type</code>, <code>macro</code>, + and <code>const</code>. + </p> + + <p> + Search functions by type signature (e.g. + <code>vec -> usize</code> or <code>* -> vec</code>) + </p> + </div> + </div> + </aside> + + + + <script> + window.rootPath = "../"; + window.currentCrate = "plist"; + </script> + <script src="../jquery.js"></script> + <script src="../main.js"></script> + <script defer src="../search-index.js"></script> +</body> +</html>
\ No newline at end of file diff --git a/plist/enum.PlistEvent.html b/plist/enum.PlistEvent.html new file mode 100644 index 0000000..d2a453c --- /dev/null +++ b/plist/enum.PlistEvent.html @@ -0,0 +1,150 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="generator" content="rustdoc"> + <meta name="description" content="API documentation for the Rust `PlistEvent` enum in crate `plist`."> + <meta name="keywords" content="rust, rustlang, rust-lang, PlistEvent"> + + <title>plist::PlistEvent - Rust</title> + + <link rel="stylesheet" type="text/css" href="../rustdoc.css"> + <link rel="stylesheet" type="text/css" href="../main.css"> + + + + +</head> +<body class="rustdoc"> + <!--[if lte IE 8]> + <div class="warning"> + This old browser is unsupported and will most likely display funky + things. + </div> + <![endif]--> + + + + <nav class="sidebar"> + + <p class='location'><a href='index.html'>plist</a></p><script>window.sidebarCurrent = {name: 'PlistEvent', ty: 'enum', relpath: ''};</script><script defer src="sidebar-items.js"></script> + </nav> + + <nav class="sub"> + <form class="search-form js-only"> + <div class="search-container"> + <input class="search-input" name="search" + autocomplete="off" + placeholder="Click or press ‘S’ to search, ‘?’ for more options…" + type="search"> + </div> + </form> + </nav> + + <section id='main' class="content enum"> +<h1 class='fqn'><span class='in-band'>Enum <a href='index.html'>plist</a>::<wbr><a class='enum' href=''>PlistEvent</a></span><span class='out-of-band'><span id='render-detail'> + <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs"> + [<span class='inner'>−</span>] + </a> + </span><a id='src-1119' class='srclink' href='../src/plist/src/lib.rs.html#389-404' title='goto source code'>[src]</a></span></h1> +<pre class='rust enum'>pub enum PlistEvent { + StartArray(<a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u64.html'>u64</a>>), + EndArray, + StartDictionary(<a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u64.html'>u64</a>>), + EndDictionary, + BooleanValue(<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a>), + DataValue(<a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a>>), + DateValue(<a class='struct' href='https://lifthrasiir.github.io/rust-chrono/chrono/datetime/struct.DateTime.html' title='chrono::datetime::DateTime'>DateTime</a><<a class='struct' href='https://lifthrasiir.github.io/rust-chrono/chrono/offset/utc/struct.UTC.html' title='chrono::offset::utc::UTC'>UTC</a>>), + IntegerValue(<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i64.html'>i64</a>), + RealValue(<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.f64.html'>f64</a>), + StringValue(<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.String.html' title='collections::string::String'>String</a>), +}</pre><div class='docblock'><p>An encoding of a plist as a flat structure.</p> + +<p>Output by the event readers.</p> + +<p>Dictionary keys and values are represented as pairs of values e.g.:</p> + +<pre class='rust rust-example-rendered'> +<span class='ident'>StartDictionary</span> +<span class='ident'>StringValue</span>(<span class='string'>"Height"</span>) <span class='comment'>// Key</span> +<span class='ident'>RealValue</span>(<span class='number'>181.2</span>) <span class='comment'>// Value</span> +<span class='ident'>StringValue</span>(<span class='string'>"Age"</span>) <span class='comment'>// Key</span> +<span class='ident'>IntegerValue</span>(<span class='number'>28</span>) <span class='comment'>// Value</span> +<span class='ident'>EndDictionary</span></pre> +</div><h2 class='variants'>Variants</h2> +<span id='variant.StartArray' class='variant'><span id='StartArray.v' class='invisible'><code>StartArray(<a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u64.html'>u64</a>>)</code></span></span><span id='variant.EndArray' class='variant'><span id='EndArray.v' class='invisible'><code>EndArray</code></span></span><span id='variant.StartDictionary' class='variant'><span id='StartDictionary.v' class='invisible'><code>StartDictionary(<a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u64.html'>u64</a>>)</code></span></span><span id='variant.EndDictionary' class='variant'><span id='EndDictionary.v' class='invisible'><code>EndDictionary</code></span></span><span id='variant.BooleanValue' class='variant'><span id='BooleanValue.v' class='invisible'><code>BooleanValue(<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a>)</code></span></span><span id='variant.DataValue' class='variant'><span id='DataValue.v' class='invisible'><code>DataValue(<a class='struct' href='https://doc.rust-lang.org/nightly/collections/vec/struct.Vec.html' title='collections::vec::Vec'>Vec</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a>>)</code></span></span><span id='variant.DateValue' class='variant'><span id='DateValue.v' class='invisible'><code>DateValue(<a class='struct' href='https://lifthrasiir.github.io/rust-chrono/chrono/datetime/struct.DateTime.html' title='chrono::datetime::DateTime'>DateTime</a><<a class='struct' href='https://lifthrasiir.github.io/rust-chrono/chrono/offset/utc/struct.UTC.html' title='chrono::offset::utc::UTC'>UTC</a>>)</code></span></span><span id='variant.IntegerValue' class='variant'><span id='IntegerValue.v' class='invisible'><code>IntegerValue(<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i64.html'>i64</a>)</code></span></span><span id='variant.RealValue' class='variant'><span id='RealValue.v' class='invisible'><code>RealValue(<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.f64.html'>f64</a>)</code></span></span><span id='variant.StringValue' class='variant'><span id='StringValue.v' class='invisible'><code>StringValue(<a class='struct' href='https://doc.rust-lang.org/nightly/collections/string/struct.String.html' title='collections::string::String'>String</a>)</code></span></span><h2 id='implementations'>Trait Implementations</h2><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html' title='core::clone::Clone'>Clone</a> for <a class='enum' href='../plist/enum.PlistEvent.html' title='plist::PlistEvent'>PlistEvent</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-1138' class='srclink' href='../src/plist/src/lib.rs.html#388' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.clone' class='method'><span id='clone.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#tymethod.clone' class='fnname'>clone</a>(&self) -> <a class='enum' href='../plist/enum.PlistEvent.html' title='plist::PlistEvent'>PlistEvent</a></code></span></h4> +<div class='docblock'><p>Returns a copy of the value. <a href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#tymethod.clone">Read more</a></p> +</div><h4 id='method.clone_from' class='method'><span id='clone_from.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#method.clone_from' class='fnname'>clone_from</a>(&mut self, source: &Self)</code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Performs copy-assignment from <code>source</code>. <a href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html#method.clone_from">Read more</a></p> +</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html' title='core::fmt::Debug'>Debug</a> for <a class='enum' href='../plist/enum.PlistEvent.html' title='plist::PlistEvent'>PlistEvent</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-1149' class='srclink' href='../src/plist/src/lib.rs.html#388' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.fmt' class='method'><span id='fmt.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html#tymethod.fmt' class='fnname'>fmt</a>(&self, __arg_0: &mut <a class='struct' href='https://doc.rust-lang.org/nightly/core/fmt/struct.Formatter.html' title='core::fmt::Formatter'>Formatter</a>) -> <a class='type' href='https://doc.rust-lang.org/nightly/core/fmt/type.Result.html' title='core::fmt::Result'>Result</a></code></span></h4> +<div class='docblock'><p>Formats the value using the given formatter.</p> +</div></div><h3 class='impl'><span class='in-band'><code>impl <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html' title='core::cmp::PartialEq'>PartialEq</a> for <a class='enum' href='../plist/enum.PlistEvent.html' title='plist::PlistEvent'>PlistEvent</a></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-1171' class='srclink' href='../src/plist/src/lib.rs.html#388' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.eq' class='method'><span id='eq.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#tymethod.eq' class='fnname'>eq</a>(&self, __arg_0: &<a class='enum' href='../plist/enum.PlistEvent.html' title='plist::PlistEvent'>PlistEvent</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></code></span></h4> +<div class='docblock'><p>This method tests for <code>self</code> and <code>other</code> values to be equal, and is used by <code>==</code>. <a href="https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#tymethod.eq">Read more</a></p> +</div><h4 id='method.ne' class='method'><span id='ne.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html#method.ne' class='fnname'>ne</a>(&self, __arg_0: &<a class='enum' href='../plist/enum.PlistEvent.html' title='plist::PlistEvent'>PlistEvent</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></code></span></h4> +<div class='docblock'><p>This method tests for <code>!=</code>.</p> +</div></div></section> + <section id='search' class="content hidden"></section> + + <section class="footer"></section> + + <aside id="help" class="hidden"> + <div> + <h1 class="hidden">Help</h1> + + <div class="shortcuts"> + <h2>Keyboard Shortcuts</h2> + + <dl> + <dt>?</dt> + <dd>Show this help dialog</dd> + <dt>S</dt> + <dd>Focus the search field</dd> + <dt>⇤</dt> + <dd>Move up in search results</dd> + <dt>⇥</dt> + <dd>Move down in search results</dd> + <dt>⏎</dt> + <dd>Go to active search result</dd> + <dt>+</dt> + <dd>Collapse/expand all sections</dd> + </dl> + </div> + + <div class="infos"> + <h2>Search Tricks</h2> + + <p> + Prefix searches with a type followed by a colon (e.g. + <code>fn:</code>) to restrict the search to a given type. + </p> + + <p> + Accepted types are: <code>fn</code>, <code>mod</code>, + <code>struct</code>, <code>enum</code>, + <code>trait</code>, <code>type</code>, <code>macro</code>, + and <code>const</code>. + </p> + + <p> + Search functions by type signature (e.g. + <code>vec -> usize</code> or <code>* -> vec</code>) + </p> + </div> + </div> + </aside> + + + + <script> + window.rootPath = "../"; + window.currentCrate = "plist"; + </script> + <script src="../jquery.js"></script> + <script src="../main.js"></script> + <script defer src="../search-index.js"></script> +</body> +</html>
\ No newline at end of file diff --git a/plist/fn.deserialize.html b/plist/fn.deserialize.html new file mode 100644 index 0000000..d138dcc --- /dev/null +++ b/plist/fn.deserialize.html @@ -0,0 +1,112 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="generator" content="rustdoc"> + <meta name="description" content="API documentation for the Rust `deserialize` fn in crate `plist`."> + <meta name="keywords" content="rust, rustlang, rust-lang, deserialize"> + + <title>plist::deserialize - Rust</title> + + <link rel="stylesheet" type="text/css" href="../rustdoc.css"> + <link rel="stylesheet" type="text/css" href="../main.css"> + + + + +</head> +<body class="rustdoc"> + <!--[if lte IE 8]> + <div class="warning"> + This old browser is unsupported and will most likely display funky + things. + </div> + <![endif]--> + + + + <nav class="sidebar"> + + <p class='location'><a href='index.html'>plist</a></p><script>window.sidebarCurrent = {name: 'deserialize', ty: 'fn', relpath: ''};</script><script defer src="sidebar-items.js"></script> + </nav> + + <nav class="sub"> + <form class="search-form js-only"> + <div class="search-container"> + <input class="search-input" name="search" + autocomplete="off" + placeholder="Click or press ‘S’ to search, ‘?’ for more options…" + type="search"> + </div> + </form> + </nav> + + <section id='main' class="content fn"> +<h1 class='fqn'><span class='in-band'>Function <a href='index.html'>plist</a>::<wbr><a class='fn' href=''>deserialize</a></span><span class='out-of-band'><span id='render-detail'> + <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs"> + [<span class='inner'>−</span>] + </a> + </span><a id='src-556' class='srclink' href='../src/plist/src/lib.rs.html#61-65' title='goto source code'>[src]</a></span></h1> +<pre class='rust fn'>pub fn deserialize<R: <a class='trait' href='https://doc.rust-lang.org/nightly/std/io/trait.Read.html' title='std::io::Read'>Read</a> + <a class='trait' href='https://doc.rust-lang.org/nightly/std/io/trait.Seek.html' title='std::io::Seek'>Seek</a>, T: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserialize.html' title='serde::de::Deserialize'>Deserialize</a>>(reader: R) -> <a class='type' href='../plist/type.Result.html' title='plist::Result'>Result</a><T></pre></section> + <section id='search' class="content hidden"></section> + + <section class="footer"></section> + + <aside id="help" class="hidden"> + <div> + <h1 class="hidden">Help</h1> + + <div class="shortcuts"> + <h2>Keyboard Shortcuts</h2> + + <dl> + <dt>?</dt> + <dd>Show this help dialog</dd> + <dt>S</dt> + <dd>Focus the search field</dd> + <dt>⇤</dt> + <dd>Move up in search results</dd> + <dt>⇥</dt> + <dd>Move down in search results</dd> + <dt>⏎</dt> + <dd>Go to active search result</dd> + <dt>+</dt> + <dd>Collapse/expand all sections</dd> + </dl> + </div> + + <div class="infos"> + <h2>Search Tricks</h2> + + <p> + Prefix searches with a type followed by a colon (e.g. + <code>fn:</code>) to restrict the search to a given type. + </p> + + <p> + Accepted types are: <code>fn</code>, <code>mod</code>, + <code>struct</code>, <code>enum</code>, + <code>trait</code>, <code>type</code>, <code>macro</code>, + and <code>const</code>. + </p> + + <p> + Search functions by type signature (e.g. + <code>vec -> usize</code> or <code>* -> vec</code>) + </p> + </div> + </div> + </aside> + + + + <script> + window.rootPath = "../"; + window.currentCrate = "plist"; + </script> + <script src="../jquery.js"></script> + <script src="../main.js"></script> + <script defer src="../search-index.js"></script> +</body> +</html>
\ No newline at end of file diff --git a/plist/fn.serialize_to_xml.html b/plist/fn.serialize_to_xml.html new file mode 100644 index 0000000..996015f --- /dev/null +++ b/plist/fn.serialize_to_xml.html @@ -0,0 +1,112 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="generator" content="rustdoc"> + <meta name="description" content="API documentation for the Rust `serialize_to_xml` fn in crate `plist`."> + <meta name="keywords" content="rust, rustlang, rust-lang, serialize_to_xml"> + + <title>plist::serialize_to_xml - Rust</title> + + <link rel="stylesheet" type="text/css" href="../rustdoc.css"> + <link rel="stylesheet" type="text/css" href="../main.css"> + + + + +</head> +<body class="rustdoc"> + <!--[if lte IE 8]> + <div class="warning"> + This old browser is unsupported and will most likely display funky + things. + </div> + <![endif]--> + + + + <nav class="sidebar"> + + <p class='location'><a href='index.html'>plist</a></p><script>window.sidebarCurrent = {name: 'serialize_to_xml', ty: 'fn', relpath: ''};</script><script defer src="sidebar-items.js"></script> + </nav> + + <nav class="sub"> + <form class="search-form js-only"> + <div class="search-container"> + <input class="search-input" name="search" + autocomplete="off" + placeholder="Click or press ‘S’ to search, ‘?’ for more options…" + type="search"> + </div> + </form> + </nav> + + <section id='main' class="content fn"> +<h1 class='fqn'><span class='in-band'>Function <a href='index.html'>plist</a>::<wbr><a class='fn' href=''>serialize_to_xml</a></span><span class='out-of-band'><span id='render-detail'> + <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs"> + [<span class='inner'>−</span>] + </a> + </span><a id='src-562' class='srclink' href='../src/plist/src/lib.rs.html#67-71' title='goto source code'>[src]</a></span></h1> +<pre class='rust fn'>pub fn serialize_to_xml<W: <a class='trait' href='https://doc.rust-lang.org/nightly/std/io/trait.Write.html' title='std::io::Write'>Write</a>, T: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serialize.html' title='serde::ser::Serialize'>Serialize</a>>(writer: W,<br> value: &T)<br> -> <a class='type' href='../plist/type.Result.html' title='plist::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>></pre></section> + <section id='search' class="content hidden"></section> + + <section class="footer"></section> + + <aside id="help" class="hidden"> + <div> + <h1 class="hidden">Help</h1> + + <div class="shortcuts"> + <h2>Keyboard Shortcuts</h2> + + <dl> + <dt>?</dt> + <dd>Show this help dialog</dd> + <dt>S</dt> + <dd>Focus the search field</dd> + <dt>⇤</dt> + <dd>Move up in search results</dd> + <dt>⇥</dt> + <dd>Move down in search results</dd> + <dt>⏎</dt> + <dd>Go to active search result</dd> + <dt>+</dt> + <dd>Collapse/expand all sections</dd> + </dl> + </div> + + <div class="infos"> + <h2>Search Tricks</h2> + + <p> + Prefix searches with a type followed by a colon (e.g. + <code>fn:</code>) to restrict the search to a given type. + </p> + + <p> + Accepted types are: <code>fn</code>, <code>mod</code>, + <code>struct</code>, <code>enum</code>, + <code>trait</code>, <code>type</code>, <code>macro</code>, + and <code>const</code>. + </p> + + <p> + Search functions by type signature (e.g. + <code>vec -> usize</code> or <code>* -> vec</code>) + </p> + </div> + </div> + </aside> + + + + <script> + window.rootPath = "../"; + window.currentCrate = "plist"; + </script> + <script src="../jquery.js"></script> + <script src="../main.js"></script> + <script defer src="../search-index.js"></script> +</body> +</html>
\ No newline at end of file diff --git a/plist/index.html b/plist/index.html new file mode 100644 index 0000000..adedcb5 --- /dev/null +++ b/plist/index.html @@ -0,0 +1,231 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="generator" content="rustdoc"> + <meta name="description" content="API documentation for the Rust `plist` crate."> + <meta name="keywords" content="rust, rustlang, rust-lang, plist"> + + <title>plist - Rust</title> + + <link rel="stylesheet" type="text/css" href="../rustdoc.css"> + <link rel="stylesheet" type="text/css" href="../main.css"> + + + + +</head> +<body class="rustdoc"> + <!--[if lte IE 8]> + <div class="warning"> + This old browser is unsupported and will most likely display funky + things. + </div> + <![endif]--> + + + + <nav class="sidebar"> + + <p class='location'></p><script>window.sidebarCurrent = {name: 'plist', ty: 'mod', relpath: '../'};</script> + </nav> + + <nav class="sub"> + <form class="search-form js-only"> + <div class="search-container"> + <input class="search-input" name="search" + autocomplete="off" + placeholder="Click or press ‘S’ to search, ‘?’ for more options…" + type="search"> + </div> + </form> + </nav> + + <section id='main' class="content mod"> +<h1 class='fqn'><span class='in-band'>Crate <a class='mod' href=''>plist</a></span><span class='out-of-band'><span id='render-detail'> + <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs"> + [<span class='inner'>−</span>] + </a> + </span><a id='src-0' class='srclink' href='../src/plist/src/lib.rs.html#1-554' title='goto source code'>[src]</a></span></h1> +<div class='docblock'> +<h1 id='plist' class='section-header'><a href='#plist'>Plist</a></h1> +<p>A rusty plist parser.</p> + +<h2 id='usage' class='section-header'><a href='#usage'>Usage</a></h2> +<p>Put this in your <code>Cargo.toml</code>:</p> + +<pre><code class="language-toml">[dependencies] +plist = "0.0.12" +</code></pre> + +<p>And put this in your crate root:</p> + +<pre class='rust rust-example-rendered'> +<span class='kw'>extern</span> <span class='kw'>crate</span> <span class='ident'>plist</span>;</pre> + +<h2 id='examples' class='section-header'><a href='#examples'>Examples</a></h2> +<pre class='rust rust-example-rendered'> +<span class='kw'>use</span> <span class='ident'>plist</span>::<span class='ident'>Plist</span>; +<span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>fs</span>::<span class='ident'>File</span>; + +<span class='kw'>let</span> <span class='ident'>file</span> <span class='op'>=</span> <span class='ident'>File</span>::<span class='ident'>open</span>(<span class='string'>"tests/data/xml.plist"</span>).<span class='ident'>unwrap</span>(); +<span class='kw'>let</span> <span class='ident'>plist</span> <span class='op'>=</span> <span class='ident'>Plist</span>::<span class='ident'>read</span>(<span class='ident'>file</span>).<span class='ident'>unwrap</span>(); + +<span class='kw'>match</span> <span class='ident'>plist</span> { + <span class='ident'>Plist</span>::<span class='ident'>Array</span>(<span class='ident'>_array</span>) <span class='op'>=></span> (), + _ <span class='op'>=></span> () +} +</pre> +</div><h2 id='modules' class='section-header'><a href="#modules">Modules</a></h2> +<table> + <tr class=' module-item'> + <td><a class='mod' href='binary/index.html' + title='plist::binary'>binary</a></td> + <td class='docblock-short'> + + </td> + </tr> + <tr class=' module-item'> + <td><a class='mod' href='xml/index.html' + title='plist::xml'>xml</a></td> + <td class='docblock-short'> + + </td> + </tr></table><h2 id='structs' class='section-header'><a href="#structs">Structs</a></h2> +<table> + <tr class=' module-item'> + <td><a class='struct' href='struct.Deserializer.html' + title='plist::Deserializer'>Deserializer</a></td> + <td class='docblock-short'> + + </td> + </tr> + <tr class=' module-item'> + <td><a class='struct' href='struct.EventReader.html' + title='plist::EventReader'>EventReader</a></td> + <td class='docblock-short'> + + </td> + </tr> + <tr class=' module-item'> + <td><a class='struct' href='struct.Serializer.html' + title='plist::Serializer'>Serializer</a></td> + <td class='docblock-short'> + + </td> + </tr></table><h2 id='enums' class='section-header'><a href="#enums">Enums</a></h2> +<table> + <tr class=' module-item'> + <td><a class='enum' href='enum.Error.html' + title='plist::Error'>Error</a></td> + <td class='docblock-short'> + + </td> + </tr> + <tr class=' module-item'> + <td><a class='enum' href='enum.Plist.html' + title='plist::Plist'>Plist</a></td> + <td class='docblock-short'> + + </td> + </tr> + <tr class=' module-item'> + <td><a class='enum' href='enum.PlistEvent.html' + title='plist::PlistEvent'>PlistEvent</a></td> + <td class='docblock-short'> + <p>An encoding of a plist as a flat structure.</p> + </td> + </tr></table><h2 id='traits' class='section-header'><a href="#traits">Traits</a></h2> +<table> + <tr class=' module-item'> + <td><a class='trait' href='trait.EventWriter.html' + title='plist::EventWriter'>EventWriter</a></td> + <td class='docblock-short'> + + </td> + </tr></table><h2 id='functions' class='section-header'><a href="#functions">Functions</a></h2> +<table> + <tr class=' module-item'> + <td><a class='fn' href='fn.deserialize.html' + title='plist::deserialize'>deserialize</a></td> + <td class='docblock-short'> + + </td> + </tr> + <tr class=' module-item'> + <td><a class='fn' href='fn.serialize_to_xml.html' + title='plist::serialize_to_xml'>serialize_to_xml</a></td> + <td class='docblock-short'> + + </td> + </tr></table><h2 id='types' class='section-header'><a href="#types">Type Definitions</a></h2> +<table> + <tr class=' module-item'> + <td><a class='type' href='type.Result.html' + title='plist::Result'>Result</a></td> + <td class='docblock-short'> + + </td> + </tr></table></section> + <section id='search' class="content hidden"></section> + + <section class="footer"></section> + + <aside id="help" class="hidden"> + <div> + <h1 class="hidden">Help</h1> + + <div class="shortcuts"> + <h2>Keyboard Shortcuts</h2> + + <dl> + <dt>?</dt> + <dd>Show this help dialog</dd> + <dt>S</dt> + <dd>Focus the search field</dd> + <dt>⇤</dt> + <dd>Move up in search results</dd> + <dt>⇥</dt> + <dd>Move down in search results</dd> + <dt>⏎</dt> + <dd>Go to active search result</dd> + <dt>+</dt> + <dd>Collapse/expand all sections</dd> + </dl> + </div> + + <div class="infos"> + <h2>Search Tricks</h2> + + <p> + Prefix searches with a type followed by a colon (e.g. + <code>fn:</code>) to restrict the search to a given type. + </p> + + <p> + Accepted types are: <code>fn</code>, <code>mod</code>, + <code>struct</code>, <code>enum</code>, + <code>trait</code>, <code>type</code>, <code>macro</code>, + and <code>const</code>. + </p> + + <p> + Search functions by type signature (e.g. + <code>vec -> usize</code> or <code>* -> vec</code>) + </p> + </div> + </div> + </aside> + + + + <script> + window.rootPath = "../"; + window.currentCrate = "plist"; + </script> + <script src="../jquery.js"></script> + <script src="../main.js"></script> + <script defer src="../search-index.js"></script> +</body> +</html>
\ No newline at end of file diff --git a/plist/ser/Serializer.t.html b/plist/ser/Serializer.t.html new file mode 100644 index 0000000..76217f7 --- /dev/null +++ b/plist/ser/Serializer.t.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta http-equiv="refresh" content="0;URL=struct.Serializer.html"> +</head> +<body> + <p>Redirecting to <a href="struct.Serializer.html">struct.Serializer.html</a>...</p> + <script>location.replace("struct.Serializer.html" + location.search + location.hash);</script> +</body> +</html>
\ No newline at end of file diff --git a/plist/ser/struct.Serializer.html b/plist/ser/struct.Serializer.html new file mode 100644 index 0000000..6fc071d --- /dev/null +++ b/plist/ser/struct.Serializer.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta http-equiv="refresh" content="0;URL=../../plist/struct.Serializer.html"> +</head> +<body> + <p>Redirecting to <a href="../../plist/struct.Serializer.html">../../plist/struct.Serializer.html</a>...</p> + <script>location.replace("../../plist/struct.Serializer.html" + location.search + location.hash);</script> +</body> +</html>
\ No newline at end of file diff --git a/plist/serialize_to_xml.v.html b/plist/serialize_to_xml.v.html new file mode 100644 index 0000000..cf9f92b --- /dev/null +++ b/plist/serialize_to_xml.v.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta http-equiv="refresh" content="0;URL=fn.serialize_to_xml.html"> +</head> +<body> + <p>Redirecting to <a href="fn.serialize_to_xml.html">fn.serialize_to_xml.html</a>...</p> + <script>location.replace("fn.serialize_to_xml.html" + location.search + location.hash);</script> +</body> +</html>
\ No newline at end of file diff --git a/plist/sidebar-items.js b/plist/sidebar-items.js new file mode 100644 index 0000000..f0dea69 --- /dev/null +++ b/plist/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"enum":[["Error",""],["Plist",""],["PlistEvent","An encoding of a plist as a flat structure."]],"fn":[["deserialize",""],["serialize_to_xml",""]],"mod":[["binary",""],["xml",""]],"struct":[["Deserializer",""],["EventReader",""],["Serializer",""]],"trait":[["EventWriter",""]],"type":[["Result",""]]});
\ No newline at end of file diff --git a/plist/struct.Deserializer.html b/plist/struct.Deserializer.html new file mode 100644 index 0000000..79fc50b --- /dev/null +++ b/plist/struct.Deserializer.html @@ -0,0 +1,192 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="generator" content="rustdoc"> + <meta name="description" content="API documentation for the Rust `Deserializer` struct in crate `plist`."> + <meta name="keywords" content="rust, rustlang, rust-lang, Deserializer"> + + <title>plist::Deserializer - Rust</title> + + <link rel="stylesheet" type="text/css" href="../rustdoc.css"> + <link rel="stylesheet" type="text/css" href="../main.css"> + + + + +</head> +<body class="rustdoc"> + <!--[if lte IE 8]> + <div class="warning"> + This old browser is unsupported and will most likely display funky + things. + </div> + <![endif]--> + + + + <nav class="sidebar"> + + <p class='location'><a href='index.html'>plist</a></p><script>window.sidebarCurrent = {name: 'Deserializer', ty: 'struct', relpath: ''};</script><script defer src="sidebar-items.js"></script> + </nav> + + <nav class="sub"> + <form class="search-form js-only"> + <div class="search-container"> + <input class="search-input" name="search" + autocomplete="off" + placeholder="Click or press ‘S’ to search, ‘?’ for more options…" + type="search"> + </div> + </form> + </nav> + + <section id='main' class="content struct"> +<h1 class='fqn'><span class='in-band'>Struct <a href='index.html'>plist</a>::<wbr><a class='struct' href=''>Deserializer</a></span><span class='out-of-band'><span id='render-detail'> + <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs"> + [<span class='inner'>−</span>] + </a> + </span><a id='src-309' class='srclink' href='../src/plist/src/de.rs.html#51-55' title='goto source code'>[src]</a></span></h1> +<pre class='rust struct'>pub struct Deserializer<I> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a><Item=<a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='enum' href='../plist/enum.PlistEvent.html' title='plist::PlistEvent'>PlistEvent</a>, <a class='enum' href='../plist/enum.Error.html' title='plist::Error'>Error</a>>></span> { /* fields omitted */ }</pre><h2 id='methods'>Methods</h2><h3 class='impl'><span class='in-band'><code>impl<I> <a class='struct' href='../plist/struct.Deserializer.html' title='plist::Deserializer'>Deserializer</a><I> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a><Item=<a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='enum' href='../plist/enum.PlistEvent.html' title='plist::PlistEvent'>PlistEvent</a>, <a class='enum' href='../plist/enum.Error.html' title='plist::Error'>Error</a>>></span></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-312' class='srclink' href='../src/plist/src/de.rs.html#57-62' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.new' class='method'><span id='new.v' class='invisible'><code>fn <a href='#method.new' class='fnname'>new</a>(iter: I) -> <a class='struct' href='../plist/struct.Deserializer.html' title='plist::Deserializer'>Deserializer</a><I></code></span></h4> +</div><h2 id='implementations'>Trait Implementations</h2><h3 class='impl'><span class='in-band'><code>impl<I> <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html' title='serde::de::Deserializer'>SerdeDeserializer</a> for <a class='struct' href='../plist/struct.Deserializer.html' title='plist::Deserializer'>Deserializer</a><I> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a><Item=<a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='enum' href='../plist/enum.PlistEvent.html' title='plist::PlistEvent'>PlistEvent</a>, <a class='enum' href='../plist/enum.Error.html' title='plist::Error'>Error</a>>></span></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-316' class='srclink' href='../src/plist/src/de.rs.html#64-149' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='associatedtype.Error' class='type'><span id='Error.t' class='invisible'><code>type <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#associatedtype.Error' class='type'>Error</a> = <a class='enum' href='../plist/enum.Error.html' title='plist::Error'>Error</a></code></span></h4> +<div class='docblock'><p>The error type that can be returned if some error occurs during deserialization.</p> +</div><h4 id='method.deserialize' class='method'><span id='deserialize.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#tymethod.deserialize' class='fnname'>deserialize</a><V>(&mut self, visitor: V) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::Value, Self::Error> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method walks a visitor through a value as it is being deserialized.</p> +</div><h4 id='method.deserialize_unit' class='method'><span id='deserialize_unit.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_unit' class='fnname'>deserialize_unit</a><V>(&mut self, visitor: V) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::Value, Self::Error> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type is expecting an <code>unit</code> value.</p> +</div><h4 id='method.deserialize_option' class='method'><span id='deserialize_option.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_option' class='fnname'>deserialize_option</a><V>(&mut self, visitor: V) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::Value, Self::Error> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type is expecting an <code>Option</code> value. This allows deserializers that encode an optional value as a nullable value to convert the null value into a <code>None</code>, and a regular value as <code>Some(value)</code>. <a href="https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_option">Read more</a></p> +</div><h4 id='method.deserialize_newtype_struct' class='method'><span id='deserialize_newtype_struct.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_newtype_struct' class='fnname'>deserialize_newtype_struct</a><V>(&mut self,<br> _name: &'static <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>,<br> visitor: V)<br> -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::Value, Self::Error> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type is expecting a newtype struct. This allows deserializers to a newtype struct that aren't tagged as a newtype struct. <a href="https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_newtype_struct">Read more</a></p> +</div><h4 id='method.deserialize_enum' class='method'><span id='deserialize_enum.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_enum' class='fnname'>deserialize_enum</a><V>(&mut self,<br> _enum: &'static <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>,<br> _variants: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.slice.html'>&'static [</a>&'static <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a><a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.slice.html'>]</a>,<br> visitor: V)<br> -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::Value, Self::Error> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.EnumVisitor.html' title='serde::de::EnumVisitor'>EnumVisitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type is expecting an enum value. This allows deserializers that provide a custom enumeration serialization to properly deserialize the type. <a href="https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_enum">Read more</a></p> +</div><h4 id='method.deserialize_bool' class='method'><span id='deserialize_bool.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_bool' class='fnname'>deserialize_bool</a><V>(&mut self, visitor: V) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Value</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html' title='serde::de::Deserializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type is expecting a <code>bool</code> value.</p> +</div><h4 id='method.deserialize_usize' class='method'><span id='deserialize_usize.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_usize' class='fnname'>deserialize_usize</a><V>(&mut self, visitor: V) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Value</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html' title='serde::de::Deserializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type is expecting an <code>usize</code> value.</p> +</div><h4 id='method.deserialize_u8' class='method'><span id='deserialize_u8.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_u8' class='fnname'>deserialize_u8</a><V>(&mut self, visitor: V) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Value</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html' title='serde::de::Deserializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type is expecting an <code>u8</code> value.</p> +</div><h4 id='method.deserialize_u16' class='method'><span id='deserialize_u16.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_u16' class='fnname'>deserialize_u16</a><V>(&mut self, visitor: V) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Value</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html' title='serde::de::Deserializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type is expecting an <code>u16</code> value.</p> +</div><h4 id='method.deserialize_u32' class='method'><span id='deserialize_u32.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_u32' class='fnname'>deserialize_u32</a><V>(&mut self, visitor: V) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Value</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html' title='serde::de::Deserializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type is expecting an <code>u32</code> value.</p> +</div><h4 id='method.deserialize_u64' class='method'><span id='deserialize_u64.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_u64' class='fnname'>deserialize_u64</a><V>(&mut self, visitor: V) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Value</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html' title='serde::de::Deserializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type is expecting an <code>u64</code> value.</p> +</div><h4 id='method.deserialize_isize' class='method'><span id='deserialize_isize.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_isize' class='fnname'>deserialize_isize</a><V>(&mut self, visitor: V) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Value</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html' title='serde::de::Deserializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type is expecting an <code>isize</code> value.</p> +</div><h4 id='method.deserialize_i8' class='method'><span id='deserialize_i8.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_i8' class='fnname'>deserialize_i8</a><V>(&mut self, visitor: V) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Value</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html' title='serde::de::Deserializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type is expecting an <code>i8</code> value.</p> +</div><h4 id='method.deserialize_i16' class='method'><span id='deserialize_i16.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_i16' class='fnname'>deserialize_i16</a><V>(&mut self, visitor: V) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Value</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html' title='serde::de::Deserializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type is expecting an <code>i16</code> value.</p> +</div><h4 id='method.deserialize_i32' class='method'><span id='deserialize_i32.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_i32' class='fnname'>deserialize_i32</a><V>(&mut self, visitor: V) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Value</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html' title='serde::de::Deserializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type is expecting an <code>i32</code> value.</p> +</div><h4 id='method.deserialize_i64' class='method'><span id='deserialize_i64.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_i64' class='fnname'>deserialize_i64</a><V>(&mut self, visitor: V) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Value</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html' title='serde::de::Deserializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type is expecting an <code>i64</code> value.</p> +</div><h4 id='method.deserialize_f32' class='method'><span id='deserialize_f32.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_f32' class='fnname'>deserialize_f32</a><V>(&mut self, visitor: V) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Value</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html' title='serde::de::Deserializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type is expecting a <code>f32</code> value.</p> +</div><h4 id='method.deserialize_f64' class='method'><span id='deserialize_f64.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_f64' class='fnname'>deserialize_f64</a><V>(&mut self, visitor: V) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Value</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html' title='serde::de::Deserializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type is expecting a <code>f64</code> value.</p> +</div><h4 id='method.deserialize_char' class='method'><span id='deserialize_char.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_char' class='fnname'>deserialize_char</a><V>(&mut self, visitor: V) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Value</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html' title='serde::de::Deserializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type is expecting a <code>char</code> value.</p> +</div><h4 id='method.deserialize_str' class='method'><span id='deserialize_str.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_str' class='fnname'>deserialize_str</a><V>(&mut self, visitor: V) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Value</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html' title='serde::de::Deserializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type is expecting a <code>&str</code> value.</p> +</div><h4 id='method.deserialize_string' class='method'><span id='deserialize_string.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_string' class='fnname'>deserialize_string</a><V>(&mut self, visitor: V) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Value</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html' title='serde::de::Deserializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type is expecting a <code>String</code> value.</p> +</div><h4 id='method.deserialize_seq' class='method'><span id='deserialize_seq.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_seq' class='fnname'>deserialize_seq</a><V>(&mut self, visitor: V) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Value</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html' title='serde::de::Deserializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type is expecting a sequence value. This allows deserializers to parse sequences that aren't tagged as sequences. <a href="https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_seq">Read more</a></p> +</div><h4 id='method.deserialize_fixed_size_array' class='method'><span id='deserialize_fixed_size_array.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_fixed_size_array' class='fnname'>deserialize_fixed_size_array</a><V>(&mut self,<br> _len: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>,<br> visitor: V)<br> -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Value</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html' title='serde::de::Deserializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type is expecting a fixed size array. This allows deserializers to parse arrays that aren't tagged as arrays. <a href="https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_fixed_size_array">Read more</a></p> +</div><h4 id='method.deserialize_bytes' class='method'><span id='deserialize_bytes.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_bytes' class='fnname'>deserialize_bytes</a><V>(&mut self, visitor: V) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Value</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html' title='serde::de::Deserializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type is expecting a <code>Vec<u8></code>. This allows deserializers that provide a custom byte vector serialization to properly deserialize the type. <a href="https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_bytes">Read more</a></p> +</div><h4 id='method.deserialize_map' class='method'><span id='deserialize_map.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_map' class='fnname'>deserialize_map</a><V>(&mut self, visitor: V) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Value</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html' title='serde::de::Deserializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type is expecting a map of values. This allows deserializers to parse sequences that aren't tagged as maps. <a href="https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_map">Read more</a></p> +</div><h4 id='method.deserialize_unit_struct' class='method'><span id='deserialize_unit_struct.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_unit_struct' class='fnname'>deserialize_unit_struct</a><V>(&mut self,<br> _name: &'static <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>,<br> visitor: V)<br> -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Value</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html' title='serde::de::Deserializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type is expecting a unit struct. This allows deserializers to a unit struct that aren't tagged as a unit struct. <a href="https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_unit_struct">Read more</a></p> +</div><h4 id='method.deserialize_tuple_struct' class='method'><span id='deserialize_tuple_struct.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_tuple_struct' class='fnname'>deserialize_tuple_struct</a><V>(&mut self,<br> _name: &'static <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>,<br> len: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>,<br> visitor: V)<br> -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Value</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html' title='serde::de::Deserializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type is expecting a tuple struct. This allows deserializers to parse sequences that aren't tagged as sequences. <a href="https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_tuple_struct">Read more</a></p> +</div><h4 id='method.deserialize_struct' class='method'><span id='deserialize_struct.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_struct' class='fnname'>deserialize_struct</a><V>(&mut self,<br> _name: &'static <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>,<br> _fields: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.slice.html'>&'static [</a>&'static <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a><a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.slice.html'>]</a>,<br> visitor: V)<br> -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Value</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html' title='serde::de::Deserializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type is expecting a struct. This allows deserializers to parse sequences that aren't tagged as maps. <a href="https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_struct">Read more</a></p> +</div><h4 id='method.deserialize_struct_field' class='method'><span id='deserialize_struct_field.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_struct_field' class='fnname'>deserialize_struct_field</a><V>(&mut self,<br> visitor: V)<br> -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Value</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html' title='serde::de::Deserializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type is expecting some sort of struct field name. This allows deserializers to choose between &str, usize, or &[u8] to properly deserialize a struct field. <a href="https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_struct_field">Read more</a></p> +</div><h4 id='method.deserialize_tuple' class='method'><span id='deserialize_tuple.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_tuple' class='fnname'>deserialize_tuple</a><V>(&mut self,<br> _len: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>,<br> visitor: V)<br> -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Value</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html' title='serde::de::Deserializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type is expecting a tuple value. This allows deserializers that provide a custom tuple serialization to properly deserialize the type. <a href="https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_tuple">Read more</a></p> +</div><h4 id='method.deserialize_ignored_any' class='method'><span id='deserialize_ignored_any.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_ignored_any' class='fnname'>deserialize_ignored_any</a><V>(&mut self,<br> visitor: V)<br> -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Value</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html' title='serde::de::Deserializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p>This method hints that the <code>Deserialize</code> type needs to deserialize a value whose type doesn't matter because it is ignored. <a href="https://serde-rs.github.io/serde/serde/serde/de/trait.Deserializer.html#method.deserialize_ignored_any">Read more</a></p> +</div></div><h3 class='impl'><span class='in-band'><code>impl<I> <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.VariantVisitor.html' title='serde::de::VariantVisitor'>VariantVisitor</a> for <a class='struct' href='../plist/struct.Deserializer.html' title='plist::Deserializer'>Deserializer</a><I> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a><Item=<a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='enum' href='../plist/enum.PlistEvent.html' title='plist::PlistEvent'>PlistEvent</a>, <a class='enum' href='../plist/enum.Error.html' title='plist::Error'>Error</a>>></span></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-360' class='srclink' href='../src/plist/src/de.rs.html#151-186' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='associatedtype.Error-1' class='type'><span id='Error.t-1' class='invisible'><code>type <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.VariantVisitor.html#associatedtype.Error' class='type'>Error</a> = <a class='enum' href='../plist/enum.Error.html' title='plist::Error'>Error</a></code></span></h4> +<div class='docblock'><p>The error type that can be returned if some error occurs during deserialization.</p> +</div><h4 id='method.visit_variant' class='method'><span id='visit_variant.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.VariantVisitor.html#tymethod.visit_variant' class='fnname'>visit_variant</a><V>(&mut self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V, Self::Error> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserialize.html' title='serde::de::Deserialize'>Deserialize</a></span></code></span></h4> +<div class='docblock'><p><code>visit_variant</code> is called to identify which variant to deserialize.</p> +</div><h4 id='method.visit_unit' class='method'><span id='visit_unit.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.VariantVisitor.html#method.visit_unit' class='fnname'>visit_unit</a>(&mut self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::Error></code></span></h4> +<div class='docblock'><p><code>visit_unit</code> is called when deserializing a variant with no values.</p> +</div><h4 id='method.visit_newtype' class='method'><span id='visit_newtype.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.VariantVisitor.html#method.visit_newtype' class='fnname'>visit_newtype</a><T>(&mut self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><T, Self::Error> <span class='where'>where T: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Deserialize.html' title='serde::de::Deserialize'>Deserialize</a></span></code></span></h4> +<div class='docblock'><p><code>visit_newtype</code> is called when deserializing a variant with a single value. By default this uses the <code>visit_tuple</code> method to deserialize the value. <a href="https://serde-rs.github.io/serde/serde/serde/de/trait.VariantVisitor.html#method.visit_newtype">Read more</a></p> +</div><h4 id='method.visit_tuple' class='method'><span id='visit_tuple.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.VariantVisitor.html#method.visit_tuple' class='fnname'>visit_tuple</a><V>(&mut self,<br> len: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>,<br> visitor: V)<br> -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::Value, Self::Error> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p><code>visit_tuple</code> is called when deserializing a tuple-like variant.</p> +</div><h4 id='method.visit_struct' class='method'><span id='visit_struct.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/de/trait.VariantVisitor.html#method.visit_struct' class='fnname'>visit_struct</a><V>(&mut self,<br> fields: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.slice.html'>&'static [</a>&'static <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a><a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.slice.html'>]</a>,<br> visitor: V)<br> -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><V::Value, Self::Error> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/de/trait.Visitor.html' title='serde::de::Visitor'>Visitor</a></span></code></span></h4> +<div class='docblock'><p><code>visit_struct</code> is called when deserializing a struct-like variant.</p> +</div></div></section> + <section id='search' class="content hidden"></section> + + <section class="footer"></section> + + <aside id="help" class="hidden"> + <div> + <h1 class="hidden">Help</h1> + + <div class="shortcuts"> + <h2>Keyboard Shortcuts</h2> + + <dl> + <dt>?</dt> + <dd>Show this help dialog</dd> + <dt>S</dt> + <dd>Focus the search field</dd> + <dt>⇤</dt> + <dd>Move up in search results</dd> + <dt>⇥</dt> + <dd>Move down in search results</dd> + <dt>⏎</dt> + <dd>Go to active search result</dd> + <dt>+</dt> + <dd>Collapse/expand all sections</dd> + </dl> + </div> + + <div class="infos"> + <h2>Search Tricks</h2> + + <p> + Prefix searches with a type followed by a colon (e.g. + <code>fn:</code>) to restrict the search to a given type. + </p> + + <p> + Accepted types are: <code>fn</code>, <code>mod</code>, + <code>struct</code>, <code>enum</code>, + <code>trait</code>, <code>type</code>, <code>macro</code>, + and <code>const</code>. + </p> + + <p> + Search functions by type signature (e.g. + <code>vec -> usize</code> or <code>* -> vec</code>) + </p> + </div> + </div> + </aside> + + + + <script> + window.rootPath = "../"; + window.currentCrate = "plist"; + </script> + <script src="../jquery.js"></script> + <script src="../main.js"></script> + <script defer src="../search-index.js"></script> +</body> +</html>
\ No newline at end of file diff --git a/plist/struct.EventReader.html b/plist/struct.EventReader.html new file mode 100644 index 0000000..fd95d19 --- /dev/null +++ b/plist/struct.EventReader.html @@ -0,0 +1,215 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="generator" content="rustdoc"> + <meta name="description" content="API documentation for the Rust `EventReader` struct in crate `plist`."> + <meta name="keywords" content="rust, rustlang, rust-lang, EventReader"> + + <title>plist::EventReader - Rust</title> + + <link rel="stylesheet" type="text/css" href="../rustdoc.css"> + <link rel="stylesheet" type="text/css" href="../main.css"> + + + + +</head> +<body class="rustdoc"> + <!--[if lte IE 8]> + <div class="warning"> + This old browser is unsupported and will most likely display funky + things. + </div> + <![endif]--> + + + + <nav class="sidebar"> + + <p class='location'><a href='index.html'>plist</a></p><script>window.sidebarCurrent = {name: 'EventReader', ty: 'struct', relpath: ''};</script><script defer src="sidebar-items.js"></script> + </nav> + + <nav class="sub"> + <form class="search-form js-only"> + <div class="search-container"> + <input class="search-input" name="search" + autocomplete="off" + placeholder="Click or press ‘S’ to search, ‘?’ for more options…" + type="search"> + </div> + </form> + </nav> + + <section id='main' class="content struct"> +<h1 class='fqn'><span class='in-band'>Struct <a href='index.html'>plist</a>::<wbr><a class='struct' href=''>EventReader</a></span><span class='out-of-band'><span id='render-detail'> + <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs"> + [<span class='inner'>−</span>] + </a> + </span><a id='src-758' class='srclink' href='../src/plist/src/lib.rs.html#449' title='goto source code'>[src]</a></span></h1> +<pre class='rust struct'>pub struct EventReader<R: <a class='trait' href='https://doc.rust-lang.org/nightly/std/io/trait.Read.html' title='std::io::Read'>Read</a> + <a class='trait' href='https://doc.rust-lang.org/nightly/std/io/trait.Seek.html' title='std::io::Seek'>Seek</a>>(_);</pre><h2 id='methods'>Methods</h2><h3 class='impl'><span class='in-band'><code>impl<R: <a class='trait' href='https://doc.rust-lang.org/nightly/std/io/trait.Read.html' title='std::io::Read'>Read</a> + <a class='trait' href='https://doc.rust-lang.org/nightly/std/io/trait.Seek.html' title='std::io::Seek'>Seek</a>> <a class='struct' href='../plist/struct.EventReader.html' title='plist::EventReader'>EventReader</a><R></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-770' class='srclink' href='../src/plist/src/lib.rs.html#457-474' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.new' class='method'><span id='new.v' class='invisible'><code>fn <a href='#method.new' class='fnname'>new</a>(reader: R) -> <a class='struct' href='../plist/struct.EventReader.html' title='plist::EventReader'>EventReader</a><R></code></span></h4> +</div><h2 id='implementations'>Trait Implementations</h2><h3 class='impl'><span class='in-band'><code>impl<R: <a class='trait' href='https://doc.rust-lang.org/nightly/std/io/trait.Read.html' title='std::io::Read'>Read</a> + <a class='trait' href='https://doc.rust-lang.org/nightly/std/io/trait.Seek.html' title='std::io::Seek'>Seek</a>> <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Iterator</a> for <a class='struct' href='../plist/struct.EventReader.html' title='plist::EventReader'>EventReader</a><R></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-778' class='srclink' href='../src/plist/src/lib.rs.html#476-499' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='associatedtype.Item' class='type'><span id='Item.t' class='invisible'><code>type <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#associatedtype.Item' class='type'>Item</a> = <a class='type' href='../plist/type.Result.html' title='plist::Result'>Result</a><<a class='enum' href='../plist/enum.PlistEvent.html' title='plist::PlistEvent'>PlistEvent</a>></code></span></h4> +<div class='docblock'><p>The type of the elements being iterated over.</p> +</div><h4 id='method.next' class='method'><span id='next.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#tymethod.next' class='fnname'>next</a>(&mut self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><<a class='type' href='../plist/type.Result.html' title='plist::Result'>Result</a><<a class='enum' href='../plist/enum.PlistEvent.html' title='plist::PlistEvent'>PlistEvent</a>>></code></span></h4> +<div class='docblock'><p>Advances the iterator and returns the next value. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#tymethod.next">Read more</a></p> +</div><h4 id='method.size_hint' class='method'><span id='size_hint.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.size_hint' class='fnname'>size_hint</a>(&self) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>(</a><a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>, <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>><a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>)</a></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Returns the bounds on the remaining length of the iterator. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.size_hint">Read more</a></p> +</div><h4 id='method.count' class='method'><span id='count.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.count' class='fnname'>count</a>(self) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Consumes the iterator, counting the number of iterations and returning it. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.count">Read more</a></p> +</div><h4 id='method.last' class='method'><span id='last.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.last' class='fnname'>last</a>(self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Consumes the iterator, returning the last element. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.last">Read more</a></p> +</div><h4 id='method.nth' class='method'><span id='nth.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.nth' class='fnname'>nth</a>(&mut self, n: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Returns the <code>n</code>th element of the iterator. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.nth">Read more</a></p> +</div><h4 id='method.chain' class='method'><span id='chain.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.chain' class='fnname'>chain</a><U>(self, other: U) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Chain.html' title='core::iter::Chain'>Chain</a><Self, U::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIter</a>> <span class='where'>where U: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a><Item=Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Takes two iterators and creates a new iterator over both in sequence. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.chain">Read more</a></p> +</div><h4 id='method.zip' class='method'><span id='zip.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.zip' class='fnname'>zip</a><U>(self, other: U) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Zip.html' title='core::iter::Zip'>Zip</a><Self, U::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIter</a>> <span class='where'>where U: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>'Zips up' two iterators into a single iterator of pairs. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.zip">Read more</a></p> +</div><h4 id='method.map' class='method'><span id='map.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.map' class='fnname'>map</a><B, F>(self, f: F) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Map.html' title='core::iter::Map'>Map</a><Self, F> <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> B</span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Takes a closure and creates an iterator which calls that closure on each element. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.map">Read more</a></p> +</div><h4 id='method.filter' class='method'><span id='filter.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.filter' class='fnname'>filter</a><P>(self, predicate: P) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Filter.html' title='core::iter::Filter'>Filter</a><Self, P> <span class='where'>where P: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator which uses a closure to determine if an element should be yielded. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.filter">Read more</a></p> +</div><h4 id='method.filter_map' class='method'><span id='filter_map.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.filter_map' class='fnname'>filter_map</a><B, F>(self, f: F) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.FilterMap.html' title='core::iter::FilterMap'>FilterMap</a><Self, F> <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><B></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator that both filters and maps. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.filter_map">Read more</a></p> +</div><h4 id='method.enumerate' class='method'><span id='enumerate.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.enumerate' class='fnname'>enumerate</a>(self) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Enumerate.html' title='core::iter::Enumerate'>Enumerate</a><Self></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator which gives the current iteration count as well as the next value. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.enumerate">Read more</a></p> +</div><h4 id='method.peekable' class='method'><span id='peekable.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.peekable' class='fnname'>peekable</a>(self) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Peekable.html' title='core::iter::Peekable'>Peekable</a><Self></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator which can use <code>peek</code> to look at the next element of the iterator without consuming it. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.peekable">Read more</a></p> +</div><h4 id='method.skip_while' class='method'><span id='skip_while.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.skip_while' class='fnname'>skip_while</a><P>(self, predicate: P) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.SkipWhile.html' title='core::iter::SkipWhile'>SkipWhile</a><Self, P> <span class='where'>where P: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator that [<code>skip()</code>]s elements based on a predicate. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.skip_while">Read more</a></p> +</div><h4 id='method.take_while' class='method'><span id='take_while.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.take_while' class='fnname'>take_while</a><P>(self, predicate: P) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.TakeWhile.html' title='core::iter::TakeWhile'>TakeWhile</a><Self, P> <span class='where'>where P: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator that yields elements based on a predicate. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.take_while">Read more</a></p> +</div><h4 id='method.skip' class='method'><span id='skip.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.skip' class='fnname'>skip</a>(self, n: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Skip.html' title='core::iter::Skip'>Skip</a><Self></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator that skips the first <code>n</code> elements. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.skip">Read more</a></p> +</div><h4 id='method.take' class='method'><span id='take.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.take' class='fnname'>take</a>(self, n: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Take.html' title='core::iter::Take'>Take</a><Self></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator that yields its first <code>n</code> elements. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.take">Read more</a></p> +</div><h4 id='method.scan' class='method'><span id='scan.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.scan' class='fnname'>scan</a><St, B, F>(self, initial_state: St, f: F) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Scan.html' title='core::iter::Scan'>Scan</a><Self, St, F> <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&mut St, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><B></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>An iterator adaptor similar to [<code>fold()</code>] that holds internal state and produces a new iterator. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.scan">Read more</a></p> +</div><h4 id='method.flat_map' class='method'><span id='flat_map.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.flat_map' class='fnname'>flat_map</a><U, F>(self, f: F) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.FlatMap.html' title='core::iter::FlatMap'>FlatMap</a><Self, U, F> <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> U, U: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator that works like map, but flattens nested structure. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.flat_map">Read more</a></p> +</div><h4 id='method.fuse' class='method'><span id='fuse.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.fuse' class='fnname'>fuse</a>(self) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Fuse.html' title='core::iter::Fuse'>Fuse</a><Self></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator which ends after the first <code>None</code>. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.fuse">Read more</a></p> +</div><h4 id='method.inspect' class='method'><span id='inspect.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.inspect' class='fnname'>inspect</a><F>(self, f: F) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Inspect.html' title='core::iter::Inspect'>Inspect</a><Self, F> <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Do something with each element of an iterator, passing the value on. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.inspect">Read more</a></p> +</div><h4 id='method.by_ref' class='method'><span id='by_ref.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.by_ref' class='fnname'>by_ref</a>(&mut self) -> &mut Self</code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Borrows an iterator, rather than consuming it. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.by_ref">Read more</a></p> +</div><h4 id='method.collect' class='method'><span id='collect.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.collect' class='fnname'>collect</a><B>(self) -> B <span class='where'>where B: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.FromIterator.html' title='core::iter::traits::FromIterator'>FromIterator</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Transforms an iterator into a collection. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.collect">Read more</a></p> +</div><h4 id='method.partition' class='method'><span id='partition.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.partition' class='fnname'>partition</a><B, F>(self, f: F) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>(</a>B, B<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>)</a> <span class='where'>where B: <a class='trait' href='https://doc.rust-lang.org/nightly/core/default/trait.Default.html' title='core::default::Default'>Default</a> + <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.Extend.html' title='core::iter::traits::Extend'>Extend</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>>, F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Consumes an iterator, creating two collections from it. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.partition">Read more</a></p> +</div><h4 id='method.fold' class='method'><span id='fold.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.fold' class='fnname'>fold</a><B, F>(self, init: B, f: F) -> B <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(B, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> B</span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>An iterator adaptor that applies a function, producing a single, final value. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.fold">Read more</a></p> +</div><h4 id='method.all' class='method'><span id='all.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.all' class='fnname'>all</a><F>(&mut self, f: F) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a> <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Tests if every element of the iterator matches a predicate. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.all">Read more</a></p> +</div><h4 id='method.any' class='method'><span id='any.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.any' class='fnname'>any</a><F>(&mut self, f: F) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a> <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Tests if any element of the iterator matches a predicate. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.any">Read more</a></p> +</div><h4 id='method.find' class='method'><span id='find.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.find' class='fnname'>find</a><P>(&mut self, predicate: P) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>> <span class='where'>where P: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Searches for an element of an iterator that satisfies a predicate. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.find">Read more</a></p> +</div><h4 id='method.position' class='method'><span id='position.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.position' class='fnname'>position</a><P>(&mut self, predicate: P) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>> <span class='where'>where P: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Searches for an element in an iterator, returning its index. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.position">Read more</a></p> +</div><h4 id='method.rposition' class='method'><span id='rposition.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.rposition' class='fnname'>rposition</a><P>(&mut self, predicate: P) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>> <span class='where'>where P: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a>, Self: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.ExactSizeIterator.html' title='core::iter::traits::ExactSizeIterator'>ExactSizeIterator</a> + <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.DoubleEndedIterator.html' title='core::iter::traits::DoubleEndedIterator'>DoubleEndedIterator</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Searches for an element in an iterator from the right, returning its index. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.rposition">Read more</a></p> +</div><h4 id='method.max' class='method'><span id='max.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.max' class='fnname'>max</a>(self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>> <span class='where'>where Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html' title='core::cmp::Ord'>Ord</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Returns the maximum element of an iterator. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.max">Read more</a></p> +</div><h4 id='method.min' class='method'><span id='min.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.min' class='fnname'>min</a>(self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>> <span class='where'>where Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html' title='core::cmp::Ord'>Ord</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Returns the minimum element of an iterator. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.min">Read more</a></p> +</div><h4 id='method.max_by_key' class='method'><span id='max_by_key.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.max_by_key' class='fnname'>max_by_key</a><B, F>(self, f: F) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>> <span class='where'>where B: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html' title='core::cmp::Ord'>Ord</a>, F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> B</span></code><div class='since' title='Stable since Rust version 1.6.0'>1.6.0</div></span></h4> +<div class='docblock'><p>Returns the element that gives the maximum value from the specified function. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.max_by_key">Read more</a></p> +</div><h4 id='method.max_by' class='method'><span id='max_by.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.max_by' class='fnname'>max_by</a><F>(self, compare: F) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>> <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>, &Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/cmp/enum.Ordering.html' title='core::cmp::Ordering'>Ordering</a></span></code></span></h4> +<div class='stability'><em class='stab unstable'>Unstable (<code>iter_max_by</code>)</em></div><div class='docblock'><p>Returns the element that gives the maximum value with respect to the specified comparison function. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.max_by">Read more</a></p> +</div><h4 id='method.min_by_key' class='method'><span id='min_by_key.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.min_by_key' class='fnname'>min_by_key</a><B, F>(self, f: F) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>> <span class='where'>where B: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html' title='core::cmp::Ord'>Ord</a>, F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> B</span></code><div class='since' title='Stable since Rust version 1.6.0'>1.6.0</div></span></h4> +<div class='docblock'><p>Returns the element that gives the minimum value from the specified function. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.min_by_key">Read more</a></p> +</div><h4 id='method.min_by' class='method'><span id='min_by.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.min_by' class='fnname'>min_by</a><F>(self, compare: F) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>> <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>, &Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/cmp/enum.Ordering.html' title='core::cmp::Ordering'>Ordering</a></span></code></span></h4> +<div class='stability'><em class='stab unstable'>Unstable (<code>iter_min_by</code>)</em></div><div class='docblock'><p>Returns the element that gives the minimum value with respect to the specified comparison function. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.min_by">Read more</a></p> +</div><h4 id='method.rev' class='method'><span id='rev.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.rev' class='fnname'>rev</a>(self) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Rev.html' title='core::iter::Rev'>Rev</a><Self> <span class='where'>where Self: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.DoubleEndedIterator.html' title='core::iter::traits::DoubleEndedIterator'>DoubleEndedIterator</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Reverses an iterator's direction. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.rev">Read more</a></p> +</div><h4 id='method.unzip' class='method'><span id='unzip.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.unzip' class='fnname'>unzip</a><A, B, FromA, FromB>(self) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>(</a>FromA, FromB<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>)</a> <span class='where'>where FromA: <a class='trait' href='https://doc.rust-lang.org/nightly/core/default/trait.Default.html' title='core::default::Default'>Default</a> + <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.Extend.html' title='core::iter::traits::Extend'>Extend</a><A>, FromB: <a class='trait' href='https://doc.rust-lang.org/nightly/core/default/trait.Default.html' title='core::default::Default'>Default</a> + <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.Extend.html' title='core::iter::traits::Extend'>Extend</a><B>, Self: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Iterator</a><Item=<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>(</a>A, B<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>)</a>></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Converts an iterator of pairs into a pair of containers. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.unzip">Read more</a></p> +</div><h4 id='method.cloned' class='method'><span id='cloned.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.cloned' class='fnname'>cloned</a><'a, T>(self) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Cloned.html' title='core::iter::Cloned'>Cloned</a><Self> <span class='where'>where Self: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Iterator</a><Item=&'a T>, T: 'a + <a class='trait' href='https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html' title='core::clone::Clone'>Clone</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator which <code>clone()</code>s all of its elements. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.cloned">Read more</a></p> +</div><h4 id='method.cycle' class='method'><span id='cycle.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.cycle' class='fnname'>cycle</a>(self) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Cycle.html' title='core::iter::Cycle'>Cycle</a><Self> <span class='where'>where Self: <a class='trait' href='https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html' title='core::clone::Clone'>Clone</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Repeats an iterator endlessly. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.cycle">Read more</a></p> +</div><h4 id='method.sum' class='method'><span id='sum.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.sum' class='fnname'>sum</a><S>(self) -> S <span class='where'>where S: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.Sum.html' title='core::iter::traits::Sum'>Sum</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.11.0'>1.11.0</div></span></h4> +<div class='docblock'><p>Sums the elements of an iterator. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.sum">Read more</a></p> +</div><h4 id='method.product' class='method'><span id='product.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.product' class='fnname'>product</a><P>(self) -> P <span class='where'>where P: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.Product.html' title='core::iter::traits::Product'>Product</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.11.0'>1.11.0</div></span></h4> +<div class='docblock'><p>Iterates over the entire iterator, multiplying all the elements <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.product">Read more</a></p> +</div><h4 id='method.cmp' class='method'><span id='cmp.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.cmp' class='fnname'>cmp</a><I>(self, other: I) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/cmp/enum.Ordering.html' title='core::cmp::Ordering'>Ordering</a> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a><Item=Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>>, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html' title='core::cmp::Ord'>Ord</a></span></code><div class='since' title='Stable since Rust version 1.5.0'>1.5.0</div></span></h4> +<div class='docblock'><p>Lexicographically compares the elements of this <code>Iterator</code> with those of another. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.cmp">Read more</a></p> +</div><h4 id='method.partial_cmp' class='method'><span id='partial_cmp.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.partial_cmp' class='fnname'>partial_cmp</a><I>(self, other: I) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><<a class='enum' href='https://doc.rust-lang.org/nightly/core/cmp/enum.Ordering.html' title='core::cmp::Ordering'>Ordering</a>> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a>, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html' title='core::cmp::PartialOrd'>PartialOrd</a><I::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.5.0'>1.5.0</div></span></h4> +<div class='docblock'><p>Lexicographically compares the elements of this <code>Iterator</code> with those of another. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.partial_cmp">Read more</a></p> +</div><h4 id='method.eq' class='method'><span id='eq.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.eq' class='fnname'>eq</a><I>(self, other: I) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a>, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html' title='core::cmp::PartialEq'>PartialEq</a><I::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.5.0'>1.5.0</div></span></h4> +<div class='docblock'><p>Determines if the elements of this <code>Iterator</code> are equal to those of another. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.eq">Read more</a></p> +</div><h4 id='method.ne' class='method'><span id='ne.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.ne' class='fnname'>ne</a><I>(self, other: I) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a>, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html' title='core::cmp::PartialEq'>PartialEq</a><I::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.5.0'>1.5.0</div></span></h4> +<div class='docblock'><p>Determines if the elements of this <code>Iterator</code> are unequal to those of another. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.ne">Read more</a></p> +</div><h4 id='method.lt' class='method'><span id='lt.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.lt' class='fnname'>lt</a><I>(self, other: I) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a>, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html' title='core::cmp::PartialOrd'>PartialOrd</a><I::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.5.0'>1.5.0</div></span></h4> +<div class='docblock'><p>Determines if the elements of this <code>Iterator</code> are lexicographically less than those of another. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.lt">Read more</a></p> +</div><h4 id='method.le' class='method'><span id='le.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.le' class='fnname'>le</a><I>(self, other: I) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a>, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html' title='core::cmp::PartialOrd'>PartialOrd</a><I::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.5.0'>1.5.0</div></span></h4> +<div class='docblock'><p>Determines if the elements of this <code>Iterator</code> are lexicographically less or equal to those of another. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.le">Read more</a></p> +</div><h4 id='method.gt' class='method'><span id='gt.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.gt' class='fnname'>gt</a><I>(self, other: I) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a>, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html' title='core::cmp::PartialOrd'>PartialOrd</a><I::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.5.0'>1.5.0</div></span></h4> +<div class='docblock'><p>Determines if the elements of this <code>Iterator</code> are lexicographically greater than those of another. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.gt">Read more</a></p> +</div><h4 id='method.ge' class='method'><span id='ge.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.ge' class='fnname'>ge</a><I>(self, other: I) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a>, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html' title='core::cmp::PartialOrd'>PartialOrd</a><I::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.5.0'>1.5.0</div></span></h4> +<div class='docblock'><p>Determines if the elements of this <code>Iterator</code> are lexicographically greater than or equal to those of another. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.ge">Read more</a></p> +</div></div></section> + <section id='search' class="content hidden"></section> + + <section class="footer"></section> + + <aside id="help" class="hidden"> + <div> + <h1 class="hidden">Help</h1> + + <div class="shortcuts"> + <h2>Keyboard Shortcuts</h2> + + <dl> + <dt>?</dt> + <dd>Show this help dialog</dd> + <dt>S</dt> + <dd>Focus the search field</dd> + <dt>⇤</dt> + <dd>Move up in search results</dd> + <dt>⇥</dt> + <dd>Move down in search results</dd> + <dt>⏎</dt> + <dd>Go to active search result</dd> + <dt>+</dt> + <dd>Collapse/expand all sections</dd> + </dl> + </div> + + <div class="infos"> + <h2>Search Tricks</h2> + + <p> + Prefix searches with a type followed by a colon (e.g. + <code>fn:</code>) to restrict the search to a given type. + </p> + + <p> + Accepted types are: <code>fn</code>, <code>mod</code>, + <code>struct</code>, <code>enum</code>, + <code>trait</code>, <code>type</code>, <code>macro</code>, + and <code>const</code>. + </p> + + <p> + Search functions by type signature (e.g. + <code>vec -> usize</code> or <code>* -> vec</code>) + </p> + </div> + </div> + </aside> + + + + <script> + window.rootPath = "../"; + window.currentCrate = "plist"; + </script> + <script src="../jquery.js"></script> + <script src="../main.js"></script> + <script defer src="../search-index.js"></script> +</body> +</html>
\ No newline at end of file diff --git a/plist/struct.Serializer.html b/plist/struct.Serializer.html new file mode 100644 index 0000000..7d0665f --- /dev/null +++ b/plist/struct.Serializer.html @@ -0,0 +1,194 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="generator" content="rustdoc"> + <meta name="description" content="API documentation for the Rust `Serializer` struct in crate `plist`."> + <meta name="keywords" content="rust, rustlang, rust-lang, Serializer"> + + <title>plist::Serializer - Rust</title> + + <link rel="stylesheet" type="text/css" href="../rustdoc.css"> + <link rel="stylesheet" type="text/css" href="../main.css"> + + + + +</head> +<body class="rustdoc"> + <!--[if lte IE 8]> + <div class="warning"> + This old browser is unsupported and will most likely display funky + things. + </div> + <![endif]--> + + + + <nav class="sidebar"> + + <p class='location'><a href='index.html'>plist</a></p><script>window.sidebarCurrent = {name: 'Serializer', ty: 'struct', relpath: ''};</script><script defer src="sidebar-items.js"></script> + </nav> + + <nav class="sub"> + <form class="search-form js-only"> + <div class="search-container"> + <input class="search-input" name="search" + autocomplete="off" + placeholder="Click or press ‘S’ to search, ‘?’ for more options…" + type="search"> + </div> + </form> + </nav> + + <section id='main' class="content struct"> +<h1 class='fqn'><span class='in-band'>Struct <a href='index.html'>plist</a>::<wbr><a class='struct' href=''>Serializer</a></span><span class='out-of-band'><span id='render-detail'> + <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs"> + [<span class='inner'>−</span>] + </a> + </span><a id='src-433' class='srclink' href='../src/plist/src/ser.rs.html#18-20' title='goto source code'>[src]</a></span></h1> +<pre class='rust struct'>pub struct Serializer<W: <a class='trait' href='../plist/trait.EventWriter.html' title='plist::EventWriter'>EventWriter</a>> { /* fields omitted */ }</pre><h2 id='methods'>Methods</h2><h3 class='impl'><span class='in-band'><code>impl<W: <a class='trait' href='../plist/trait.EventWriter.html' title='plist::EventWriter'>EventWriter</a>> <a class='struct' href='../plist/struct.Serializer.html' title='plist::Serializer'>Serializer</a><W></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-436' class='srclink' href='../src/plist/src/ser.rs.html#22-49' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.new' class='method'><span id='new.v' class='invisible'><code>fn <a href='#method.new' class='fnname'>new</a>(writer: W) -> <a class='struct' href='../plist/struct.Serializer.html' title='plist::Serializer'>Serializer</a><W></code></span></h4> +<h4 id='method.into_inner' class='method'><span id='into_inner.v' class='invisible'><code>fn <a href='#method.into_inner' class='fnname'>into_inner</a>(self) -> W</code></span></h4> +</div><h2 id='implementations'>Trait Implementations</h2><h3 class='impl'><span class='in-band'><code>impl<W: <a class='trait' href='../plist/trait.EventWriter.html' title='plist::EventWriter'>EventWriter</a>> <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html' title='serde::ser::Serializer'>SerdeSerializer</a> for <a class='struct' href='../plist/struct.Serializer.html' title='plist::Serializer'>Serializer</a><W></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-450' class='srclink' href='../src/plist/src/ser.rs.html#51-186' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='associatedtype.Error' class='type'><span id='Error.t' class='invisible'><code>type <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#associatedtype.Error' class='type'>Error</a> = <a class='enum' href='../plist/enum.Error.html' title='plist::Error'>Error</a></code></span></h4> +<div class='docblock'><p>The error type that can be returned if some error occurs during serialization.</p> +</div><h4 id='method.serialize_bool' class='method'><span id='serialize_bool.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#tymethod.serialize_bool' class='fnname'>serialize_bool</a>(&mut self, v: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::Error></code></span></h4> +<div class='docblock'><p>Serializes a <code>bool</code> value.</p> +</div><h4 id='method.serialize_i64' class='method'><span id='serialize_i64.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#tymethod.serialize_i64' class='fnname'>serialize_i64</a>(&mut self, v: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i64.html'>i64</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::Error></code></span></h4> +<div class='docblock'><p>Serializes a <code>i64</code> value.</p> +</div><h4 id='method.serialize_u64' class='method'><span id='serialize_u64.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#tymethod.serialize_u64' class='fnname'>serialize_u64</a>(&mut self, v: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u64.html'>u64</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::Error></code></span></h4> +<div class='docblock'><p><code>Serializes a</code>u64` value.</p> +</div><h4 id='method.serialize_f64' class='method'><span id='serialize_f64.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#tymethod.serialize_f64' class='fnname'>serialize_f64</a>(&mut self, v: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.f64.html'>f64</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::Error></code></span></h4> +<div class='docblock'><p>Serializes a <code>f64</code> value.</p> +</div><h4 id='method.serialize_str' class='method'><span id='serialize_str.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#tymethod.serialize_str' class='fnname'>serialize_str</a>(&mut self, value: &<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::Error></code></span></h4> +<div class='docblock'><p>Serializes a <code>&str</code>.</p> +</div><h4 id='method.serialize_bytes' class='method'><span id='serialize_bytes.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_bytes' class='fnname'>serialize_bytes</a>(&mut self, value: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.slice.html'>&[</a><a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a><a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.slice.html'>]</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::Error></code></span></h4> +<div class='docblock'><p>Enables those serialization formats that support serializing byte slices separately from generic arrays. By default it serializes as a regular array. <a href="https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_bytes">Read more</a></p> +</div><h4 id='method.serialize_unit' class='method'><span id='serialize_unit.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#tymethod.serialize_unit' class='fnname'>serialize_unit</a>(&mut self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::Error></code></span></h4> +<div class='docblock'><p>Serializes a <code>()</code> value.</p> +</div><h4 id='method.serialize_none' class='method'><span id='serialize_none.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#tymethod.serialize_none' class='fnname'>serialize_none</a>(&mut self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::Error></code></span></h4> +<div class='docblock'><p>Serializes a <code>None</code> value..serialize</p> +</div><h4 id='method.serialize_some' class='method'><span id='serialize_some.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#tymethod.serialize_some' class='fnname'>serialize_some</a><V>(&mut self, value: V) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::Error> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serialize.html' title='serde::ser::Serialize'>Serialize</a></span></code></span></h4> +<div class='docblock'><p>Serializes a <code>Some(...)</code> value.</p> +</div><h4 id='method.serialize_seq' class='method'><span id='serialize_seq.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#tymethod.serialize_seq' class='fnname'>serialize_seq</a><V>(&mut self, visitor: V) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::Error> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.SeqVisitor.html' title='serde::ser::SeqVisitor'>SeqVisitor</a></span></code></span></h4> +<div class='docblock'><p>Serializes a sequence. <a href="https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#tymethod.serialize_seq">Read more</a></p> +</div><h4 id='method.serialize_seq_elt' class='method'><span id='serialize_seq_elt.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#tymethod.serialize_seq_elt' class='fnname'>serialize_seq_elt</a><T>(&mut self, value: T) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::Error> <span class='where'>where T: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serialize.html' title='serde::ser::Serialize'>Serialize</a></span></code></span></h4> +<div class='docblock'><p>Serializes a sequence element.</p> +</div><h4 id='method.serialize_map' class='method'><span id='serialize_map.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#tymethod.serialize_map' class='fnname'>serialize_map</a><V>(&mut self, visitor: V) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::Error> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.MapVisitor.html' title='serde::ser::MapVisitor'>MapVisitor</a></span></code></span></h4> +<div class='docblock'><p>Serializes a map. <a href="https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#tymethod.serialize_map">Read more</a></p> +</div><h4 id='method.serialize_map_elt' class='method'><span id='serialize_map_elt.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#tymethod.serialize_map_elt' class='fnname'>serialize_map_elt</a><K, V>(&mut self,<br> key: K,<br> value: V)<br> -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::Error> <span class='where'>where K: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serialize.html' title='serde::ser::Serialize'>Serialize</a>, V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serialize.html' title='serde::ser::Serialize'>Serialize</a></span></code></span></h4> +<div class='docblock'><p>Serializes a map element (key-value pair).</p> +</div><h4 id='method.serialize_unit_variant' class='method'><span id='serialize_unit_variant.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_unit_variant' class='fnname'>serialize_unit_variant</a>(&mut self,<br> _name: &'static <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>,<br> _variant_index: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>,<br> variant: &'static <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>)<br> -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::Error></code></span></h4> +<div class='docblock'><p>Serializes a unit variant, otherwise known as a variant with no arguments. <a href="https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_unit_variant">Read more</a></p> +</div><h4 id='method.serialize_newtype_struct' class='method'><span id='serialize_newtype_struct.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_newtype_struct' class='fnname'>serialize_newtype_struct</a><T>(&mut self,<br> _name: &'static <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>,<br> value: T)<br> -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::Error> <span class='where'>where T: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serialize.html' title='serde::ser::Serialize'>Serialize</a></span></code></span></h4> +<div class='docblock'><p>Allows a tuple struct with a single element, also known as a newtyped value, to be more efficiently serialized than a tuple struct with multiple items. By default it just serializes the value as a tuple struct sequence. <a href="https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_newtype_struct">Read more</a></p> +</div><h4 id='method.serialize_newtype_variant' class='method'><span id='serialize_newtype_variant.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_newtype_variant' class='fnname'>serialize_newtype_variant</a><T>(&mut self,<br> _name: &'static <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>,<br> _variant_index: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>,<br> variant: &'static <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>,<br> value: T)<br> -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::Error> <span class='where'>where T: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serialize.html' title='serde::ser::Serialize'>Serialize</a></span></code></span></h4> +<div class='docblock'><p>Allows a variant with a single item to be more efficiently serialized than a variant with multiple items. By default it just serializes the value as a tuple variant sequence. <a href="https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_newtype_variant">Read more</a></p> +</div><h4 id='method.serialize_tuple_variant' class='method'><span id='serialize_tuple_variant.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_tuple_variant' class='fnname'>serialize_tuple_variant</a><V>(&mut self,<br> _name: &'static <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>,<br> _variant_index: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>,<br> variant: &'static <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>,<br> visitor: V)<br> -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::Error> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.SeqVisitor.html' title='serde::ser::SeqVisitor'>SeqVisitor</a></span></code></span></h4> +<div class='docblock'><p>Serializes a tuple variant. <a href="https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_tuple_variant">Read more</a></p> +</div><h4 id='method.serialize_struct_variant' class='method'><span id='serialize_struct_variant.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_struct_variant' class='fnname'>serialize_struct_variant</a><V>(&mut self,<br> _name: &'static <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>,<br> _variant_index: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>,<br> variant: &'static <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>,<br> visitor: V)<br> -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::Error> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.MapVisitor.html' title='serde::ser::MapVisitor'>MapVisitor</a></span></code></span></h4> +<div class='docblock'><p>Serializes a struct variant. <a href="https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_struct_variant">Read more</a></p> +</div><h4 id='method.serialize_isize' class='method'><span id='serialize_isize.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_isize' class='fnname'>serialize_isize</a>(&mut self, v: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.isize.html'>isize</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html' title='serde::ser::Serializer'>Error</a>></code></span></h4> +<div class='docblock'><p>Serializes a <code>isize</code> value. By default it casts the value to a <code>i64</code> and passes it to the <code>serialize_i64</code> method. <a href="https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_isize">Read more</a></p> +</div><h4 id='method.serialize_i8' class='method'><span id='serialize_i8.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_i8' class='fnname'>serialize_i8</a>(&mut self, v: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i8.html'>i8</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html' title='serde::ser::Serializer'>Error</a>></code></span></h4> +<div class='docblock'><p>Serializes a <code>i8</code> value. By default it casts the value to a <code>i64</code> and passes it to the <code>serialize_i64</code> method. <a href="https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_i8">Read more</a></p> +</div><h4 id='method.serialize_i16' class='method'><span id='serialize_i16.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_i16' class='fnname'>serialize_i16</a>(&mut self, v: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i16.html'>i16</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html' title='serde::ser::Serializer'>Error</a>></code></span></h4> +<div class='docblock'><p>Serializes a <code>i16</code> value. By default it casts the value to a <code>i64</code> and passes it to the <code>serialize_i64</code> method. <a href="https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_i16">Read more</a></p> +</div><h4 id='method.serialize_i32' class='method'><span id='serialize_i32.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_i32' class='fnname'>serialize_i32</a>(&mut self, v: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.i32.html'>i32</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html' title='serde::ser::Serializer'>Error</a>></code></span></h4> +<div class='docblock'><p>Serializes a <code>i32</code> value. By default it casts the value to a <code>i64</code> and passes it to the <code>serialize_i64</code> method. <a href="https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_i32">Read more</a></p> +</div><h4 id='method.serialize_usize' class='method'><span id='serialize_usize.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_usize' class='fnname'>serialize_usize</a>(&mut self, v: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html' title='serde::ser::Serializer'>Error</a>></code></span></h4> +<div class='docblock'><p>Serializes a <code>usize</code> value. By default it casts the value to a <code>u64</code> and passes it to the <code>serialize_u64</code> method. <a href="https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_usize">Read more</a></p> +</div><h4 id='method.serialize_u8' class='method'><span id='serialize_u8.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_u8' class='fnname'>serialize_u8</a>(&mut self, v: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u8.html'>u8</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html' title='serde::ser::Serializer'>Error</a>></code></span></h4> +<div class='docblock'><p>Serializes a <code>u8</code> value. By default it casts the value to a <code>u64</code> and passes it to the <code>serialize_u64</code> method. <a href="https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_u8">Read more</a></p> +</div><h4 id='method.serialize_u16' class='method'><span id='serialize_u16.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_u16' class='fnname'>serialize_u16</a>(&mut self, v: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u16.html'>u16</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html' title='serde::ser::Serializer'>Error</a>></code></span></h4> +<div class='docblock'><p>Serializes a <code>u32</code> value. By default it casts the value to a <code>u64</code> and passes it to the <code>serialize_u64</code> method. <a href="https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_u16">Read more</a></p> +</div><h4 id='method.serialize_u32' class='method'><span id='serialize_u32.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_u32' class='fnname'>serialize_u32</a>(&mut self, v: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.u32.html'>u32</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html' title='serde::ser::Serializer'>Error</a>></code></span></h4> +<div class='docblock'><p>Serializes a <code>u32</code> value. By default it casts the value to a <code>u64</code> and passes it to the <code>serialize_u64</code> method. <a href="https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_u32">Read more</a></p> +</div><h4 id='method.serialize_f32' class='method'><span id='serialize_f32.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_f32' class='fnname'>serialize_f32</a>(&mut self, v: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.f32.html'>f32</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html' title='serde::ser::Serializer'>Error</a>></code></span></h4> +<div class='docblock'><p>Serializes a <code>f32</code> value. By default it casts the value to a <code>f64</code> and passes it to the <code>serialize_f64</code> method. <a href="https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_f32">Read more</a></p> +</div><h4 id='method.serialize_char' class='method'><span id='serialize_char.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_char' class='fnname'>serialize_char</a>(&mut self, v: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.char.html'>char</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html' title='serde::ser::Serializer'>Error</a>></code></span></h4> +<div class='docblock'><p>Serializes a character. By default it serializes it as a <code>&str</code> containing a single character. <a href="https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_char">Read more</a></p> +</div><h4 id='method.serialize_unit_struct' class='method'><span id='serialize_unit_struct.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_unit_struct' class='fnname'>serialize_unit_struct</a>(&mut self,<br> _name: &'static <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>)<br> -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html' title='serde::ser::Serializer'>Error</a>></code></span></h4> +<div class='docblock'><p>Serializes a unit struct value. <a href="https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_unit_struct">Read more</a></p> +</div><h4 id='method.serialize_tuple' class='method'><span id='serialize_tuple.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_tuple' class='fnname'>serialize_tuple</a><V>(&mut self, visitor: V) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html' title='serde::ser::Serializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.SeqVisitor.html' title='serde::ser::SeqVisitor'>SeqVisitor</a></span></code></span></h4> +<div class='docblock'><p>Serializes a tuple. <a href="https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_tuple">Read more</a></p> +</div><h4 id='method.serialize_tuple_elt' class='method'><span id='serialize_tuple_elt.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_tuple_elt' class='fnname'>serialize_tuple_elt</a><T>(&mut self, value: T) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html' title='serde::ser::Serializer'>Error</a>> <span class='where'>where T: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serialize.html' title='serde::ser::Serialize'>Serialize</a></span></code></span></h4> +<div class='docblock'><p>Serializes a tuple element. <a href="https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_tuple_elt">Read more</a></p> +</div><h4 id='method.serialize_fixed_size_array' class='method'><span id='serialize_fixed_size_array.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_fixed_size_array' class='fnname'>serialize_fixed_size_array</a><V>(&mut self,<br> visitor: V)<br> -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html' title='serde::ser::Serializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.SeqVisitor.html' title='serde::ser::SeqVisitor'>SeqVisitor</a></span></code></span></h4> +<div class='docblock'><p>Serializes a fixed-size array. <a href="https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_fixed_size_array">Read more</a></p> +</div><h4 id='method.serialize_tuple_struct' class='method'><span id='serialize_tuple_struct.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_tuple_struct' class='fnname'>serialize_tuple_struct</a><V>(&mut self,<br> _name: &'static <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>,<br> visitor: V)<br> -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html' title='serde::ser::Serializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.SeqVisitor.html' title='serde::ser::SeqVisitor'>SeqVisitor</a></span></code></span></h4> +<div class='docblock'><p>Serializes a tuple struct. <a href="https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_tuple_struct">Read more</a></p> +</div><h4 id='method.serialize_tuple_struct_elt' class='method'><span id='serialize_tuple_struct_elt.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_tuple_struct_elt' class='fnname'>serialize_tuple_struct_elt</a><T>(&mut self, value: T) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html' title='serde::ser::Serializer'>Error</a>> <span class='where'>where T: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serialize.html' title='serde::ser::Serialize'>Serialize</a></span></code></span></h4> +<div class='docblock'><p>Serializes a tuple struct element. <a href="https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_tuple_struct_elt">Read more</a></p> +</div><h4 id='method.serialize_tuple_variant_elt' class='method'><span id='serialize_tuple_variant_elt.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_tuple_variant_elt' class='fnname'>serialize_tuple_variant_elt</a><T>(&mut self,<br> value: T)<br> -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html' title='serde::ser::Serializer'>Error</a>> <span class='where'>where T: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serialize.html' title='serde::ser::Serialize'>Serialize</a></span></code></span></h4> +<div class='docblock'><p>Serializes a tuple element. <a href="https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_tuple_variant_elt">Read more</a></p> +</div><h4 id='method.serialize_struct' class='method'><span id='serialize_struct.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_struct' class='fnname'>serialize_struct</a><V>(&mut self,<br> _name: &'static <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>,<br> visitor: V)<br> -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html' title='serde::ser::Serializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.MapVisitor.html' title='serde::ser::MapVisitor'>MapVisitor</a></span></code></span></h4> +<div class='docblock'><p>Serializes a struct. <a href="https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_struct">Read more</a></p> +</div><h4 id='method.serialize_struct_elt' class='method'><span id='serialize_struct_elt.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_struct_elt' class='fnname'>serialize_struct_elt</a><V>(&mut self,<br> key: &'static <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>,<br> value: V)<br> -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html' title='serde::ser::Serializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serialize.html' title='serde::ser::Serialize'>Serialize</a></span></code></span></h4> +<div class='docblock'><p>Serializes an element of a struct. <a href="https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_struct_elt">Read more</a></p> +</div><h4 id='method.serialize_struct_variant_elt' class='method'><span id='serialize_struct_variant_elt.v' class='invisible'><code>fn <a href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_struct_variant_elt' class='fnname'>serialize_struct_variant_elt</a><V>(&mut self,<br> key: &'static <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.str.html'>str</a>,<br> value: V)<br> -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>, Self::<a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html' title='serde::ser::Serializer'>Error</a>> <span class='where'>where V: <a class='trait' href='https://serde-rs.github.io/serde/serde/serde/ser/trait.Serialize.html' title='serde::ser::Serialize'>Serialize</a></span></code></span></h4> +<div class='docblock'><p>Serializes an element of a struct variant. <a href="https://serde-rs.github.io/serde/serde/serde/ser/trait.Serializer.html#method.serialize_struct_variant_elt">Read more</a></p> +</div></div></section> + <section id='search' class="content hidden"></section> + + <section class="footer"></section> + + <aside id="help" class="hidden"> + <div> + <h1 class="hidden">Help</h1> + + <div class="shortcuts"> + <h2>Keyboard Shortcuts</h2> + + <dl> + <dt>?</dt> + <dd>Show this help dialog</dd> + <dt>S</dt> + <dd>Focus the search field</dd> + <dt>⇤</dt> + <dd>Move up in search results</dd> + <dt>⇥</dt> + <dd>Move down in search results</dd> + <dt>⏎</dt> + <dd>Go to active search result</dd> + <dt>+</dt> + <dd>Collapse/expand all sections</dd> + </dl> + </div> + + <div class="infos"> + <h2>Search Tricks</h2> + + <p> + Prefix searches with a type followed by a colon (e.g. + <code>fn:</code>) to restrict the search to a given type. + </p> + + <p> + Accepted types are: <code>fn</code>, <code>mod</code>, + <code>struct</code>, <code>enum</code>, + <code>trait</code>, <code>type</code>, <code>macro</code>, + and <code>const</code>. + </p> + + <p> + Search functions by type signature (e.g. + <code>vec -> usize</code> or <code>* -> vec</code>) + </p> + </div> + </div> + </aside> + + + + <script> + window.rootPath = "../"; + window.currentCrate = "plist"; + </script> + <script src="../jquery.js"></script> + <script src="../main.js"></script> + <script defer src="../search-index.js"></script> +</body> +</html>
\ No newline at end of file diff --git a/plist/trait.EventWriter.html b/plist/trait.EventWriter.html new file mode 100644 index 0000000..b62d570 --- /dev/null +++ b/plist/trait.EventWriter.html @@ -0,0 +1,123 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="generator" content="rustdoc"> + <meta name="description" content="API documentation for the Rust `EventWriter` trait in crate `plist`."> + <meta name="keywords" content="rust, rustlang, rust-lang, EventWriter"> + + <title>plist::EventWriter - Rust</title> + + <link rel="stylesheet" type="text/css" href="../rustdoc.css"> + <link rel="stylesheet" type="text/css" href="../main.css"> + + + + +</head> +<body class="rustdoc"> + <!--[if lte IE 8]> + <div class="warning"> + This old browser is unsupported and will most likely display funky + things. + </div> + <![endif]--> + + + + <nav class="sidebar"> + + <p class='location'><a href='index.html'>plist</a></p><script>window.sidebarCurrent = {name: 'EventWriter', ty: 'trait', relpath: ''};</script><script defer src="sidebar-items.js"></script> + </nav> + + <nav class="sub"> + <form class="search-form js-only"> + <div class="search-container"> + <input class="search-input" name="search" + autocomplete="off" + placeholder="Click or press ‘S’ to search, ‘?’ for more options…" + type="search"> + </div> + </form> + </nav> + + <section id='main' class="content trait"> +<h1 class='fqn'><span class='in-band'>Trait <a href='index.html'>plist</a>::<wbr><a class='trait' href=''>EventWriter</a></span><span class='out-of-band'><span id='render-detail'> + <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs"> + [<span class='inner'>−</span>] + </a> + </span><a id='src-789' class='srclink' href='../src/plist/src/lib.rs.html#501-503' title='goto source code'>[src]</a></span></h1> +<pre class='rust trait'>pub trait EventWriter { + fn <a href='#tymethod.write' class='fnname'>write</a>(&mut self, event: &<a class='enum' href='../plist/enum.PlistEvent.html' title='plist::PlistEvent'>PlistEvent</a>) -> <a class='type' href='../plist/type.Result.html' title='plist::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>>; +}</pre> + <h2 id='required-methods'>Required Methods</h2> + <div class='methods'> + <h3 id='tymethod.write' class='method stab '><span id='write.v' class='invisible'><code>fn <a href='#tymethod.write' class='fnname'>write</a>(&mut self, event: &<a class='enum' href='../plist/enum.PlistEvent.html' title='plist::PlistEvent'>PlistEvent</a>) -> <a class='type' href='../plist/type.Result.html' title='plist::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>></code></span></h3></div> + <h2 id='implementors'>Implementors</h2> + <ul class='item-list' id='implementors-list'> + <li><code>impl<W: <a class='trait' href='https://doc.rust-lang.org/nightly/std/io/trait.Write.html' title='std::io::Write'>Write</a>> PlistEventWriter for <a class='struct' href='../plist/xml/struct.EventWriter.html' title='plist::xml::EventWriter'>EventWriter</a><W></code></li> +</ul><script type="text/javascript" async + src="../implementors/plist/trait.EventWriter.js"> + </script></section> + <section id='search' class="content hidden"></section> + + <section class="footer"></section> + + <aside id="help" class="hidden"> + <div> + <h1 class="hidden">Help</h1> + + <div class="shortcuts"> + <h2>Keyboard Shortcuts</h2> + + <dl> + <dt>?</dt> + <dd>Show this help dialog</dd> + <dt>S</dt> + <dd>Focus the search field</dd> + <dt>⇤</dt> + <dd>Move up in search results</dd> + <dt>⇥</dt> + <dd>Move down in search results</dd> + <dt>⏎</dt> + <dd>Go to active search result</dd> + <dt>+</dt> + <dd>Collapse/expand all sections</dd> + </dl> + </div> + + <div class="infos"> + <h2>Search Tricks</h2> + + <p> + Prefix searches with a type followed by a colon (e.g. + <code>fn:</code>) to restrict the search to a given type. + </p> + + <p> + Accepted types are: <code>fn</code>, <code>mod</code>, + <code>struct</code>, <code>enum</code>, + <code>trait</code>, <code>type</code>, <code>macro</code>, + and <code>const</code>. + </p> + + <p> + Search functions by type signature (e.g. + <code>vec -> usize</code> or <code>* -> vec</code>) + </p> + </div> + </div> + </aside> + + + + <script> + window.rootPath = "../"; + window.currentCrate = "plist"; + </script> + <script src="../jquery.js"></script> + <script src="../main.js"></script> + <script defer src="../search-index.js"></script> +</body> +</html>
\ No newline at end of file diff --git a/plist/type.Result.html b/plist/type.Result.html new file mode 100644 index 0000000..634071b --- /dev/null +++ b/plist/type.Result.html @@ -0,0 +1,112 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="generator" content="rustdoc"> + <meta name="description" content="API documentation for the Rust `Result` type in crate `plist`."> + <meta name="keywords" content="rust, rustlang, rust-lang, Result"> + + <title>plist::Result - Rust</title> + + <link rel="stylesheet" type="text/css" href="../rustdoc.css"> + <link rel="stylesheet" type="text/css" href="../main.css"> + + + + +</head> +<body class="rustdoc"> + <!--[if lte IE 8]> + <div class="warning"> + This old browser is unsupported and will most likely display funky + things. + </div> + <![endif]--> + + + + <nav class="sidebar"> + + <p class='location'><a href='index.html'>plist</a></p><script>window.sidebarCurrent = {name: 'Result', ty: 'type', relpath: ''};</script><script defer src="sidebar-items.js"></script> + </nav> + + <nav class="sub"> + <form class="search-form js-only"> + <div class="search-container"> + <input class="search-input" name="search" + autocomplete="off" + placeholder="Click or press ‘S’ to search, ‘?’ for more options…" + type="search"> + </div> + </form> + </nav> + + <section id='main' class="content type"> +<h1 class='fqn'><span class='in-band'>Type Definition <a href='index.html'>plist</a>::<wbr><a class='type' href=''>Result</a></span><span class='out-of-band'><span id='render-detail'> + <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs"> + [<span class='inner'>−</span>] + </a> + </span><a id='src-740' class='srclink' href='../src/plist/src/lib.rs.html#406' title='goto source code'>[src]</a></span></h1> +<pre class='rust typedef'>type Result<T> = <a class='enum' href='https://doc.rust-lang.org/nightly/core/result/enum.Result.html' title='core::result::Result'>Result</a><T, <a class='enum' href='../plist/enum.Error.html' title='plist::Error'>Error</a>>;</pre></section> + <section id='search' class="content hidden"></section> + + <section class="footer"></section> + + <aside id="help" class="hidden"> + <div> + <h1 class="hidden">Help</h1> + + <div class="shortcuts"> + <h2>Keyboard Shortcuts</h2> + + <dl> + <dt>?</dt> + <dd>Show this help dialog</dd> + <dt>S</dt> + <dd>Focus the search field</dd> + <dt>⇤</dt> + <dd>Move up in search results</dd> + <dt>⇥</dt> + <dd>Move down in search results</dd> + <dt>⏎</dt> + <dd>Go to active search result</dd> + <dt>+</dt> + <dd>Collapse/expand all sections</dd> + </dl> + </div> + + <div class="infos"> + <h2>Search Tricks</h2> + + <p> + Prefix searches with a type followed by a colon (e.g. + <code>fn:</code>) to restrict the search to a given type. + </p> + + <p> + Accepted types are: <code>fn</code>, <code>mod</code>, + <code>struct</code>, <code>enum</code>, + <code>trait</code>, <code>type</code>, <code>macro</code>, + and <code>const</code>. + </p> + + <p> + Search functions by type signature (e.g. + <code>vec -> usize</code> or <code>* -> vec</code>) + </p> + </div> + </div> + </aside> + + + + <script> + window.rootPath = "../"; + window.currentCrate = "plist"; + </script> + <script src="../jquery.js"></script> + <script src="../main.js"></script> + <script defer src="../search-index.js"></script> +</body> +</html>
\ No newline at end of file diff --git a/plist/xml/EventReader.t.html b/plist/xml/EventReader.t.html new file mode 100644 index 0000000..59e7663 --- /dev/null +++ b/plist/xml/EventReader.t.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta http-equiv="refresh" content="0;URL=struct.EventReader.html"> +</head> +<body> + <p>Redirecting to <a href="struct.EventReader.html">struct.EventReader.html</a>...</p> + <script>location.replace("struct.EventReader.html" + location.search + location.hash);</script> +</body> +</html>
\ No newline at end of file diff --git a/plist/xml/EventWriter.t.html b/plist/xml/EventWriter.t.html new file mode 100644 index 0000000..ab9a414 --- /dev/null +++ b/plist/xml/EventWriter.t.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta http-equiv="refresh" content="0;URL=struct.EventWriter.html"> +</head> +<body> + <p>Redirecting to <a href="struct.EventWriter.html">struct.EventWriter.html</a>...</p> + <script>location.replace("struct.EventWriter.html" + location.search + location.hash);</script> +</body> +</html>
\ No newline at end of file diff --git a/plist/xml/index.html b/plist/xml/index.html new file mode 100644 index 0000000..cd43438 --- /dev/null +++ b/plist/xml/index.html @@ -0,0 +1,127 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="generator" content="rustdoc"> + <meta name="description" content="API documentation for the Rust `xml` mod in crate `plist`."> + <meta name="keywords" content="rust, rustlang, rust-lang, xml"> + + <title>plist::xml - Rust</title> + + <link rel="stylesheet" type="text/css" href="../../rustdoc.css"> + <link rel="stylesheet" type="text/css" href="../../main.css"> + + + + +</head> +<body class="rustdoc"> + <!--[if lte IE 8]> + <div class="warning"> + This old browser is unsupported and will most likely display funky + things. + </div> + <![endif]--> + + + + <nav class="sidebar"> + + <p class='location'><a href='../index.html'>plist</a></p><script>window.sidebarCurrent = {name: 'xml', ty: 'mod', relpath: '../'};</script><script defer src="../sidebar-items.js"></script> + </nav> + + <nav class="sub"> + <form class="search-form js-only"> + <div class="search-container"> + <input class="search-input" name="search" + autocomplete="off" + placeholder="Click or press ‘S’ to search, ‘?’ for more options…" + type="search"> + </div> + </form> + </nav> + + <section id='main' class="content mod"> +<h1 class='fqn'><span class='in-band'>Module <a href='../index.html'>plist</a>::<wbr><a class='mod' href=''>xml</a></span><span class='out-of-band'><span id='render-detail'> + <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs"> + [<span class='inner'>−</span>] + </a> + </span><a id='src-123' class='srclink' href='../../src/plist/src/xml/mod.rs.html#1-5' title='goto source code'>[src]</a></span></h1> +<h2 id='structs' class='section-header'><a href="#structs">Structs</a></h2> +<table> + <tr class=' module-item'> + <td><a class='struct' href='struct.EventReader.html' + title='plist::xml::EventReader'>EventReader</a></td> + <td class='docblock-short'> + + </td> + </tr> + <tr class=' module-item'> + <td><a class='struct' href='struct.EventWriter.html' + title='plist::xml::EventWriter'>EventWriter</a></td> + <td class='docblock-short'> + + </td> + </tr></table></section> + <section id='search' class="content hidden"></section> + + <section class="footer"></section> + + <aside id="help" class="hidden"> + <div> + <h1 class="hidden">Help</h1> + + <div class="shortcuts"> + <h2>Keyboard Shortcuts</h2> + + <dl> + <dt>?</dt> + <dd>Show this help dialog</dd> + <dt>S</dt> + <dd>Focus the search field</dd> + <dt>⇤</dt> + <dd>Move up in search results</dd> + <dt>⇥</dt> + <dd>Move down in search results</dd> + <dt>⏎</dt> + <dd>Go to active search result</dd> + <dt>+</dt> + <dd>Collapse/expand all sections</dd> + </dl> + </div> + + <div class="infos"> + <h2>Search Tricks</h2> + + <p> + Prefix searches with a type followed by a colon (e.g. + <code>fn:</code>) to restrict the search to a given type. + </p> + + <p> + Accepted types are: <code>fn</code>, <code>mod</code>, + <code>struct</code>, <code>enum</code>, + <code>trait</code>, <code>type</code>, <code>macro</code>, + and <code>const</code>. + </p> + + <p> + Search functions by type signature (e.g. + <code>vec -> usize</code> or <code>* -> vec</code>) + </p> + </div> + </div> + </aside> + + + + <script> + window.rootPath = "../../"; + window.currentCrate = "plist"; + </script> + <script src="../../jquery.js"></script> + <script src="../../main.js"></script> + <script defer src="../../search-index.js"></script> +</body> +</html>
\ No newline at end of file diff --git a/plist/xml/reader/EventReader.t.html b/plist/xml/reader/EventReader.t.html new file mode 100644 index 0000000..59e7663 --- /dev/null +++ b/plist/xml/reader/EventReader.t.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta http-equiv="refresh" content="0;URL=struct.EventReader.html"> +</head> +<body> + <p>Redirecting to <a href="struct.EventReader.html">struct.EventReader.html</a>...</p> + <script>location.replace("struct.EventReader.html" + location.search + location.hash);</script> +</body> +</html>
\ No newline at end of file diff --git a/plist/xml/reader/struct.EventReader.html b/plist/xml/reader/struct.EventReader.html new file mode 100644 index 0000000..e2f8a28 --- /dev/null +++ b/plist/xml/reader/struct.EventReader.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta http-equiv="refresh" content="0;URL=../../../plist/xml/struct.EventReader.html"> +</head> +<body> + <p>Redirecting to <a href="../../../plist/xml/struct.EventReader.html">../../../plist/xml/struct.EventReader.html</a>...</p> + <script>location.replace("../../../plist/xml/struct.EventReader.html" + location.search + location.hash);</script> +</body> +</html>
\ No newline at end of file diff --git a/plist/xml/sidebar-items.js b/plist/xml/sidebar-items.js new file mode 100644 index 0000000..0d2a592 --- /dev/null +++ b/plist/xml/sidebar-items.js @@ -0,0 +1 @@ +initSidebarItems({"struct":[["EventReader",""],["EventWriter",""]]});
\ No newline at end of file diff --git a/plist/xml/struct.EventReader.html b/plist/xml/struct.EventReader.html new file mode 100644 index 0000000..f946ef5 --- /dev/null +++ b/plist/xml/struct.EventReader.html @@ -0,0 +1,215 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="generator" content="rustdoc"> + <meta name="description" content="API documentation for the Rust `EventReader` struct in crate `plist`."> + <meta name="keywords" content="rust, rustlang, rust-lang, EventReader"> + + <title>plist::xml::EventReader - Rust</title> + + <link rel="stylesheet" type="text/css" href="../../rustdoc.css"> + <link rel="stylesheet" type="text/css" href="../../main.css"> + + + + +</head> +<body class="rustdoc"> + <!--[if lte IE 8]> + <div class="warning"> + This old browser is unsupported and will most likely display funky + things. + </div> + <![endif]--> + + + + <nav class="sidebar"> + + <p class='location'><a href='../index.html'>plist</a>::<wbr><a href='index.html'>xml</a></p><script>window.sidebarCurrent = {name: 'EventReader', ty: 'struct', relpath: ''};</script><script defer src="sidebar-items.js"></script> + </nav> + + <nav class="sub"> + <form class="search-form js-only"> + <div class="search-container"> + <input class="search-input" name="search" + autocomplete="off" + placeholder="Click or press ‘S’ to search, ‘?’ for more options…" + type="search"> + </div> + </form> + </nav> + + <section id='main' class="content struct"> +<h1 class='fqn'><span class='in-band'>Struct <a href='../index.html'>plist</a>::<wbr><a href='index.html'>xml</a>::<wbr><a class='struct' href=''>EventReader</a></span><span class='out-of-band'><span id='render-detail'> + <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs"> + [<span class='inner'>−</span>] + </a> + </span><a id='src-134' class='srclink' href='../../src/plist/src/xml/reader.rs.html#16-21' title='goto source code'>[src]</a></span></h1> +<pre class='rust struct'>pub struct EventReader<R: <a class='trait' href='https://doc.rust-lang.org/nightly/std/io/trait.Read.html' title='std::io::Read'>Read</a>> { /* fields omitted */ }</pre><h2 id='methods'>Methods</h2><h3 class='impl'><span class='in-band'><code>impl<R: <a class='trait' href='https://doc.rust-lang.org/nightly/std/io/trait.Read.html' title='std::io::Read'>Read</a>> <a class='struct' href='../../plist/xml/struct.EventReader.html' title='plist::xml::EventReader'>EventReader</a><R></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-140' class='srclink' href='../../src/plist/src/xml/reader.rs.html#23-139' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.new' class='method'><span id='new.v' class='invisible'><code>fn <a href='#method.new' class='fnname'>new</a>(reader: R) -> <a class='struct' href='../../plist/xml/struct.EventReader.html' title='plist::xml::EventReader'>EventReader</a><R></code></span></h4> +</div><h2 id='implementations'>Trait Implementations</h2><h3 class='impl'><span class='in-band'><code>impl<R: <a class='trait' href='https://doc.rust-lang.org/nightly/std/io/trait.Read.html' title='std::io::Read'>Read</a>> <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Iterator</a> for <a class='struct' href='../../plist/xml/struct.EventReader.html' title='plist::xml::EventReader'>EventReader</a><R></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-179' class='srclink' href='../../src/plist/src/xml/reader.rs.html#141-161' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='associatedtype.Item' class='type'><span id='Item.t' class='invisible'><code>type <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#associatedtype.Item' class='type'>Item</a> = <a class='type' href='../../plist/type.Result.html' title='plist::Result'>Result</a><<a class='enum' href='../../plist/enum.PlistEvent.html' title='plist::PlistEvent'>PlistEvent</a>></code></span></h4> +<div class='docblock'><p>The type of the elements being iterated over.</p> +</div><h4 id='method.next' class='method'><span id='next.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#tymethod.next' class='fnname'>next</a>(&mut self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><<a class='type' href='../../plist/type.Result.html' title='plist::Result'>Result</a><<a class='enum' href='../../plist/enum.PlistEvent.html' title='plist::PlistEvent'>PlistEvent</a>>></code></span></h4> +<div class='docblock'><p>Advances the iterator and returns the next value. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#tymethod.next">Read more</a></p> +</div><h4 id='method.size_hint' class='method'><span id='size_hint.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.size_hint' class='fnname'>size_hint</a>(&self) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>(</a><a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>, <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>><a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>)</a></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Returns the bounds on the remaining length of the iterator. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.size_hint">Read more</a></p> +</div><h4 id='method.count' class='method'><span id='count.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.count' class='fnname'>count</a>(self) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Consumes the iterator, counting the number of iterations and returning it. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.count">Read more</a></p> +</div><h4 id='method.last' class='method'><span id='last.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.last' class='fnname'>last</a>(self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Consumes the iterator, returning the last element. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.last">Read more</a></p> +</div><h4 id='method.nth' class='method'><span id='nth.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.nth' class='fnname'>nth</a>(&mut self, n: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Returns the <code>n</code>th element of the iterator. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.nth">Read more</a></p> +</div><h4 id='method.chain' class='method'><span id='chain.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.chain' class='fnname'>chain</a><U>(self, other: U) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Chain.html' title='core::iter::Chain'>Chain</a><Self, U::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIter</a>> <span class='where'>where U: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a><Item=Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Takes two iterators and creates a new iterator over both in sequence. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.chain">Read more</a></p> +</div><h4 id='method.zip' class='method'><span id='zip.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.zip' class='fnname'>zip</a><U>(self, other: U) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Zip.html' title='core::iter::Zip'>Zip</a><Self, U::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIter</a>> <span class='where'>where U: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>'Zips up' two iterators into a single iterator of pairs. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.zip">Read more</a></p> +</div><h4 id='method.map' class='method'><span id='map.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.map' class='fnname'>map</a><B, F>(self, f: F) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Map.html' title='core::iter::Map'>Map</a><Self, F> <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> B</span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Takes a closure and creates an iterator which calls that closure on each element. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.map">Read more</a></p> +</div><h4 id='method.filter' class='method'><span id='filter.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.filter' class='fnname'>filter</a><P>(self, predicate: P) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Filter.html' title='core::iter::Filter'>Filter</a><Self, P> <span class='where'>where P: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator which uses a closure to determine if an element should be yielded. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.filter">Read more</a></p> +</div><h4 id='method.filter_map' class='method'><span id='filter_map.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.filter_map' class='fnname'>filter_map</a><B, F>(self, f: F) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.FilterMap.html' title='core::iter::FilterMap'>FilterMap</a><Self, F> <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><B></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator that both filters and maps. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.filter_map">Read more</a></p> +</div><h4 id='method.enumerate' class='method'><span id='enumerate.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.enumerate' class='fnname'>enumerate</a>(self) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Enumerate.html' title='core::iter::Enumerate'>Enumerate</a><Self></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator which gives the current iteration count as well as the next value. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.enumerate">Read more</a></p> +</div><h4 id='method.peekable' class='method'><span id='peekable.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.peekable' class='fnname'>peekable</a>(self) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Peekable.html' title='core::iter::Peekable'>Peekable</a><Self></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator which can use <code>peek</code> to look at the next element of the iterator without consuming it. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.peekable">Read more</a></p> +</div><h4 id='method.skip_while' class='method'><span id='skip_while.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.skip_while' class='fnname'>skip_while</a><P>(self, predicate: P) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.SkipWhile.html' title='core::iter::SkipWhile'>SkipWhile</a><Self, P> <span class='where'>where P: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator that [<code>skip()</code>]s elements based on a predicate. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.skip_while">Read more</a></p> +</div><h4 id='method.take_while' class='method'><span id='take_while.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.take_while' class='fnname'>take_while</a><P>(self, predicate: P) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.TakeWhile.html' title='core::iter::TakeWhile'>TakeWhile</a><Self, P> <span class='where'>where P: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator that yields elements based on a predicate. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.take_while">Read more</a></p> +</div><h4 id='method.skip' class='method'><span id='skip.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.skip' class='fnname'>skip</a>(self, n: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Skip.html' title='core::iter::Skip'>Skip</a><Self></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator that skips the first <code>n</code> elements. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.skip">Read more</a></p> +</div><h4 id='method.take' class='method'><span id='take.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.take' class='fnname'>take</a>(self, n: <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Take.html' title='core::iter::Take'>Take</a><Self></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator that yields its first <code>n</code> elements. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.take">Read more</a></p> +</div><h4 id='method.scan' class='method'><span id='scan.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.scan' class='fnname'>scan</a><St, B, F>(self, initial_state: St, f: F) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Scan.html' title='core::iter::Scan'>Scan</a><Self, St, F> <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&mut St, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><B></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>An iterator adaptor similar to [<code>fold()</code>] that holds internal state and produces a new iterator. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.scan">Read more</a></p> +</div><h4 id='method.flat_map' class='method'><span id='flat_map.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.flat_map' class='fnname'>flat_map</a><U, F>(self, f: F) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.FlatMap.html' title='core::iter::FlatMap'>FlatMap</a><Self, U, F> <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> U, U: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator that works like map, but flattens nested structure. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.flat_map">Read more</a></p> +</div><h4 id='method.fuse' class='method'><span id='fuse.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.fuse' class='fnname'>fuse</a>(self) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Fuse.html' title='core::iter::Fuse'>Fuse</a><Self></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator which ends after the first <code>None</code>. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.fuse">Read more</a></p> +</div><h4 id='method.inspect' class='method'><span id='inspect.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.inspect' class='fnname'>inspect</a><F>(self, f: F) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Inspect.html' title='core::iter::Inspect'>Inspect</a><Self, F> <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Do something with each element of an iterator, passing the value on. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.inspect">Read more</a></p> +</div><h4 id='method.by_ref' class='method'><span id='by_ref.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.by_ref' class='fnname'>by_ref</a>(&mut self) -> &mut Self</code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Borrows an iterator, rather than consuming it. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.by_ref">Read more</a></p> +</div><h4 id='method.collect' class='method'><span id='collect.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.collect' class='fnname'>collect</a><B>(self) -> B <span class='where'>where B: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.FromIterator.html' title='core::iter::traits::FromIterator'>FromIterator</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Transforms an iterator into a collection. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.collect">Read more</a></p> +</div><h4 id='method.partition' class='method'><span id='partition.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.partition' class='fnname'>partition</a><B, F>(self, f: F) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>(</a>B, B<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>)</a> <span class='where'>where B: <a class='trait' href='https://doc.rust-lang.org/nightly/core/default/trait.Default.html' title='core::default::Default'>Default</a> + <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.Extend.html' title='core::iter::traits::Extend'>Extend</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>>, F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Consumes an iterator, creating two collections from it. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.partition">Read more</a></p> +</div><h4 id='method.fold' class='method'><span id='fold.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.fold' class='fnname'>fold</a><B, F>(self, init: B, f: F) -> B <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(B, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> B</span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>An iterator adaptor that applies a function, producing a single, final value. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.fold">Read more</a></p> +</div><h4 id='method.all' class='method'><span id='all.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.all' class='fnname'>all</a><F>(&mut self, f: F) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a> <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Tests if every element of the iterator matches a predicate. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.all">Read more</a></p> +</div><h4 id='method.any' class='method'><span id='any.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.any' class='fnname'>any</a><F>(&mut self, f: F) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a> <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Tests if any element of the iterator matches a predicate. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.any">Read more</a></p> +</div><h4 id='method.find' class='method'><span id='find.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.find' class='fnname'>find</a><P>(&mut self, predicate: P) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>> <span class='where'>where P: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Searches for an element of an iterator that satisfies a predicate. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.find">Read more</a></p> +</div><h4 id='method.position' class='method'><span id='position.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.position' class='fnname'>position</a><P>(&mut self, predicate: P) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>> <span class='where'>where P: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Searches for an element in an iterator, returning its index. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.position">Read more</a></p> +</div><h4 id='method.rposition' class='method'><span id='rposition.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.rposition' class='fnname'>rposition</a><P>(&mut self, predicate: P) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.usize.html'>usize</a>> <span class='where'>where P: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a>, Self: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.ExactSizeIterator.html' title='core::iter::traits::ExactSizeIterator'>ExactSizeIterator</a> + <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.DoubleEndedIterator.html' title='core::iter::traits::DoubleEndedIterator'>DoubleEndedIterator</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Searches for an element in an iterator from the right, returning its index. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.rposition">Read more</a></p> +</div><h4 id='method.max' class='method'><span id='max.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.max' class='fnname'>max</a>(self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>> <span class='where'>where Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html' title='core::cmp::Ord'>Ord</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Returns the maximum element of an iterator. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.max">Read more</a></p> +</div><h4 id='method.min' class='method'><span id='min.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.min' class='fnname'>min</a>(self) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>> <span class='where'>where Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html' title='core::cmp::Ord'>Ord</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Returns the minimum element of an iterator. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.min">Read more</a></p> +</div><h4 id='method.max_by_key' class='method'><span id='max_by_key.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.max_by_key' class='fnname'>max_by_key</a><B, F>(self, f: F) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>> <span class='where'>where B: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html' title='core::cmp::Ord'>Ord</a>, F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> B</span></code><div class='since' title='Stable since Rust version 1.6.0'>1.6.0</div></span></h4> +<div class='docblock'><p>Returns the element that gives the maximum value from the specified function. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.max_by_key">Read more</a></p> +</div><h4 id='method.max_by' class='method'><span id='max_by.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.max_by' class='fnname'>max_by</a><F>(self, compare: F) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>> <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>, &Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/cmp/enum.Ordering.html' title='core::cmp::Ordering'>Ordering</a></span></code></span></h4> +<div class='stability'><em class='stab unstable'>Unstable (<code>iter_max_by</code>)</em></div><div class='docblock'><p>Returns the element that gives the maximum value with respect to the specified comparison function. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.max_by">Read more</a></p> +</div><h4 id='method.min_by_key' class='method'><span id='min_by_key.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.min_by_key' class='fnname'>min_by_key</a><B, F>(self, f: F) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>> <span class='where'>where B: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html' title='core::cmp::Ord'>Ord</a>, F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> B</span></code><div class='since' title='Stable since Rust version 1.6.0'>1.6.0</div></span></h4> +<div class='docblock'><p>Returns the element that gives the minimum value from the specified function. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.min_by_key">Read more</a></p> +</div><h4 id='method.min_by' class='method'><span id='min_by.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.min_by' class='fnname'>min_by</a><F>(self, compare: F) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>> <span class='where'>where F: <a class='trait' href='https://doc.rust-lang.org/nightly/core/ops/trait.FnMut.html' title='core::ops::FnMut'>FnMut</a>(&Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>, &Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/cmp/enum.Ordering.html' title='core::cmp::Ordering'>Ordering</a></span></code></span></h4> +<div class='stability'><em class='stab unstable'>Unstable (<code>iter_min_by</code>)</em></div><div class='docblock'><p>Returns the element that gives the minimum value with respect to the specified comparison function. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.min_by">Read more</a></p> +</div><h4 id='method.rev' class='method'><span id='rev.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.rev' class='fnname'>rev</a>(self) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Rev.html' title='core::iter::Rev'>Rev</a><Self> <span class='where'>where Self: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.DoubleEndedIterator.html' title='core::iter::traits::DoubleEndedIterator'>DoubleEndedIterator</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Reverses an iterator's direction. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.rev">Read more</a></p> +</div><h4 id='method.unzip' class='method'><span id='unzip.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.unzip' class='fnname'>unzip</a><A, B, FromA, FromB>(self) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>(</a>FromA, FromB<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>)</a> <span class='where'>where FromA: <a class='trait' href='https://doc.rust-lang.org/nightly/core/default/trait.Default.html' title='core::default::Default'>Default</a> + <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.Extend.html' title='core::iter::traits::Extend'>Extend</a><A>, FromB: <a class='trait' href='https://doc.rust-lang.org/nightly/core/default/trait.Default.html' title='core::default::Default'>Default</a> + <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.Extend.html' title='core::iter::traits::Extend'>Extend</a><B>, Self: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Iterator</a><Item=<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>(</a>A, B<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>)</a>></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Converts an iterator of pairs into a pair of containers. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.unzip">Read more</a></p> +</div><h4 id='method.cloned' class='method'><span id='cloned.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.cloned' class='fnname'>cloned</a><'a, T>(self) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Cloned.html' title='core::iter::Cloned'>Cloned</a><Self> <span class='where'>where Self: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Iterator</a><Item=&'a T>, T: 'a + <a class='trait' href='https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html' title='core::clone::Clone'>Clone</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Creates an iterator which <code>clone()</code>s all of its elements. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.cloned">Read more</a></p> +</div><h4 id='method.cycle' class='method'><span id='cycle.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.cycle' class='fnname'>cycle</a>(self) -> <a class='struct' href='https://doc.rust-lang.org/nightly/core/iter/struct.Cycle.html' title='core::iter::Cycle'>Cycle</a><Self> <span class='where'>where Self: <a class='trait' href='https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html' title='core::clone::Clone'>Clone</a></span></code><div class='since' title='Stable since Rust version 1.0.0'>1.0.0</div></span></h4> +<div class='docblock'><p>Repeats an iterator endlessly. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.cycle">Read more</a></p> +</div><h4 id='method.sum' class='method'><span id='sum.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.sum' class='fnname'>sum</a><S>(self) -> S <span class='where'>where S: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.Sum.html' title='core::iter::traits::Sum'>Sum</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.11.0'>1.11.0</div></span></h4> +<div class='docblock'><p>Sums the elements of an iterator. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.sum">Read more</a></p> +</div><h4 id='method.product' class='method'><span id='product.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.product' class='fnname'>product</a><P>(self) -> P <span class='where'>where P: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.Product.html' title='core::iter::traits::Product'>Product</a><Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.11.0'>1.11.0</div></span></h4> +<div class='docblock'><p>Iterates over the entire iterator, multiplying all the elements <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.product">Read more</a></p> +</div><h4 id='method.cmp' class='method'><span id='cmp.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.cmp' class='fnname'>cmp</a><I>(self, other: I) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/cmp/enum.Ordering.html' title='core::cmp::Ordering'>Ordering</a> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a><Item=Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>>, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.Ord.html' title='core::cmp::Ord'>Ord</a></span></code><div class='since' title='Stable since Rust version 1.5.0'>1.5.0</div></span></h4> +<div class='docblock'><p>Lexicographically compares the elements of this <code>Iterator</code> with those of another. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.cmp">Read more</a></p> +</div><h4 id='method.partial_cmp' class='method'><span id='partial_cmp.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.partial_cmp' class='fnname'>partial_cmp</a><I>(self, other: I) -> <a class='enum' href='https://doc.rust-lang.org/nightly/core/option/enum.Option.html' title='core::option::Option'>Option</a><<a class='enum' href='https://doc.rust-lang.org/nightly/core/cmp/enum.Ordering.html' title='core::cmp::Ordering'>Ordering</a>> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a>, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html' title='core::cmp::PartialOrd'>PartialOrd</a><I::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.5.0'>1.5.0</div></span></h4> +<div class='docblock'><p>Lexicographically compares the elements of this <code>Iterator</code> with those of another. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.partial_cmp">Read more</a></p> +</div><h4 id='method.eq' class='method'><span id='eq.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.eq' class='fnname'>eq</a><I>(self, other: I) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a>, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html' title='core::cmp::PartialEq'>PartialEq</a><I::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.5.0'>1.5.0</div></span></h4> +<div class='docblock'><p>Determines if the elements of this <code>Iterator</code> are equal to those of another. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.eq">Read more</a></p> +</div><h4 id='method.ne' class='method'><span id='ne.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.ne' class='fnname'>ne</a><I>(self, other: I) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a>, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialEq.html' title='core::cmp::PartialEq'>PartialEq</a><I::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.5.0'>1.5.0</div></span></h4> +<div class='docblock'><p>Determines if the elements of this <code>Iterator</code> are unequal to those of another. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.ne">Read more</a></p> +</div><h4 id='method.lt' class='method'><span id='lt.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.lt' class='fnname'>lt</a><I>(self, other: I) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a>, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html' title='core::cmp::PartialOrd'>PartialOrd</a><I::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.5.0'>1.5.0</div></span></h4> +<div class='docblock'><p>Determines if the elements of this <code>Iterator</code> are lexicographically less than those of another. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.lt">Read more</a></p> +</div><h4 id='method.le' class='method'><span id='le.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.le' class='fnname'>le</a><I>(self, other: I) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a>, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html' title='core::cmp::PartialOrd'>PartialOrd</a><I::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.5.0'>1.5.0</div></span></h4> +<div class='docblock'><p>Determines if the elements of this <code>Iterator</code> are lexicographically less or equal to those of another. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.le">Read more</a></p> +</div><h4 id='method.gt' class='method'><span id='gt.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.gt' class='fnname'>gt</a><I>(self, other: I) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a>, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html' title='core::cmp::PartialOrd'>PartialOrd</a><I::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.5.0'>1.5.0</div></span></h4> +<div class='docblock'><p>Determines if the elements of this <code>Iterator</code> are lexicographically greater than those of another. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.gt">Read more</a></p> +</div><h4 id='method.ge' class='method'><span id='ge.v' class='invisible'><code>fn <a href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.ge' class='fnname'>ge</a><I>(self, other: I) -> <a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.bool.html'>bool</a> <span class='where'>where I: <a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>IntoIterator</a>, Self::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html' title='core::iter::iterator::Iterator'>Item</a>: <a class='trait' href='https://doc.rust-lang.org/nightly/core/cmp/trait.PartialOrd.html' title='core::cmp::PartialOrd'>PartialOrd</a><I::<a class='trait' href='https://doc.rust-lang.org/nightly/core/iter/traits/trait.IntoIterator.html' title='core::iter::traits::IntoIterator'>Item</a>></span></code><div class='since' title='Stable since Rust version 1.5.0'>1.5.0</div></span></h4> +<div class='docblock'><p>Determines if the elements of this <code>Iterator</code> are lexicographically greater than or equal to those of another. <a href="https://doc.rust-lang.org/nightly/core/iter/iterator/trait.Iterator.html#method.ge">Read more</a></p> +</div></div></section> + <section id='search' class="content hidden"></section> + + <section class="footer"></section> + + <aside id="help" class="hidden"> + <div> + <h1 class="hidden">Help</h1> + + <div class="shortcuts"> + <h2>Keyboard Shortcuts</h2> + + <dl> + <dt>?</dt> + <dd>Show this help dialog</dd> + <dt>S</dt> + <dd>Focus the search field</dd> + <dt>⇤</dt> + <dd>Move up in search results</dd> + <dt>⇥</dt> + <dd>Move down in search results</dd> + <dt>⏎</dt> + <dd>Go to active search result</dd> + <dt>+</dt> + <dd>Collapse/expand all sections</dd> + </dl> + </div> + + <div class="infos"> + <h2>Search Tricks</h2> + + <p> + Prefix searches with a type followed by a colon (e.g. + <code>fn:</code>) to restrict the search to a given type. + </p> + + <p> + Accepted types are: <code>fn</code>, <code>mod</code>, + <code>struct</code>, <code>enum</code>, + <code>trait</code>, <code>type</code>, <code>macro</code>, + and <code>const</code>. + </p> + + <p> + Search functions by type signature (e.g. + <code>vec -> usize</code> or <code>* -> vec</code>) + </p> + </div> + </div> + </aside> + + + + <script> + window.rootPath = "../../"; + window.currentCrate = "plist"; + </script> + <script src="../../jquery.js"></script> + <script src="../../main.js"></script> + <script defer src="../../search-index.js"></script> +</body> +</html>
\ No newline at end of file diff --git a/plist/xml/struct.EventWriter.html b/plist/xml/struct.EventWriter.html new file mode 100644 index 0000000..85476e6 --- /dev/null +++ b/plist/xml/struct.EventWriter.html @@ -0,0 +1,117 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="generator" content="rustdoc"> + <meta name="description" content="API documentation for the Rust `EventWriter` struct in crate `plist`."> + <meta name="keywords" content="rust, rustlang, rust-lang, EventWriter"> + + <title>plist::xml::EventWriter - Rust</title> + + <link rel="stylesheet" type="text/css" href="../../rustdoc.css"> + <link rel="stylesheet" type="text/css" href="../../main.css"> + + + + +</head> +<body class="rustdoc"> + <!--[if lte IE 8]> + <div class="warning"> + This old browser is unsupported and will most likely display funky + things. + </div> + <![endif]--> + + + + <nav class="sidebar"> + + <p class='location'><a href='../index.html'>plist</a>::<wbr><a href='index.html'>xml</a></p><script>window.sidebarCurrent = {name: 'EventWriter', ty: 'struct', relpath: ''};</script><script defer src="sidebar-items.js"></script> + </nav> + + <nav class="sub"> + <form class="search-form js-only"> + <div class="search-container"> + <input class="search-input" name="search" + autocomplete="off" + placeholder="Click or press ‘S’ to search, ‘?’ for more options…" + type="search"> + </div> + </form> + </nav> + + <section id='main' class="content struct"> +<h1 class='fqn'><span class='in-band'>Struct <a href='../index.html'>plist</a>::<wbr><a href='index.html'>xml</a>::<wbr><a class='struct' href=''>EventWriter</a></span><span class='out-of-band'><span id='render-detail'> + <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs"> + [<span class='inner'>−</span>] + </a> + </span><a id='src-209' class='srclink' href='../../src/plist/src/xml/writer.rs.html#32-37' title='goto source code'>[src]</a></span></h1> +<pre class='rust struct'>pub struct EventWriter<W: <a class='trait' href='https://doc.rust-lang.org/nightly/std/io/trait.Write.html' title='std::io::Write'>Write</a>> { /* fields omitted */ }</pre><h2 id='methods'>Methods</h2><h3 class='impl'><span class='in-band'><code>impl<W: <a class='trait' href='https://doc.rust-lang.org/nightly/std/io/trait.Write.html' title='std::io::Write'>Write</a>> <a class='struct' href='../../plist/xml/struct.EventWriter.html' title='plist::xml::EventWriter'>EventWriter</a><W></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-214' class='srclink' href='../../src/plist/src/xml/writer.rs.html#39-100' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.new' class='method'><span id='new.v' class='invisible'><code>fn <a href='#method.new' class='fnname'>new</a>(writer: W) -> <a class='struct' href='../../plist/xml/struct.EventWriter.html' title='plist::xml::EventWriter'>EventWriter</a><W></code></span></h4> +<h4 id='method.write' class='method'><span id='write.v' class='invisible'><code>fn <a href='#method.write' class='fnname'>write</a>(&mut self, event: &<a class='enum' href='../../plist/enum.PlistEvent.html' title='plist::PlistEvent'>PlistEvent</a>) -> <a class='type' href='../../plist/type.Result.html' title='plist::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>></code></span></h4> +</div><h2 id='implementations'>Trait Implementations</h2><h3 class='impl'><span class='in-band'><code>impl<W: <a class='trait' href='https://doc.rust-lang.org/nightly/std/io/trait.Write.html' title='std::io::Write'>Write</a>> <a class='trait' href='../../plist/trait.EventWriter.html' title='plist::EventWriter'>PlistEventWriter</a> for <a class='struct' href='../../plist/xml/struct.EventWriter.html' title='plist::xml::EventWriter'>EventWriter</a><W></code></span><span class='out-of-band'><div class='ghost'></div><a id='src-237' class='srclink' href='../../src/plist/src/xml/writer.rs.html#102-187' title='goto source code'>[src]</a></span></h3> +<div class='impl-items'><h4 id='method.write-1' class='method'><span id='write.v-1' class='invisible'><code>fn <a href='../../plist/trait.EventWriter.html#tymethod.write' class='fnname'>write</a>(&mut self, event: &<a class='enum' href='../../plist/enum.PlistEvent.html' title='plist::PlistEvent'>PlistEvent</a>) -> <a class='type' href='../../plist/type.Result.html' title='plist::Result'>Result</a><<a class='primitive' href='https://doc.rust-lang.org/nightly/std/primitive.tuple.html'>()</a>></code></span></h4> +</div></section> + <section id='search' class="content hidden"></section> + + <section class="footer"></section> + + <aside id="help" class="hidden"> + <div> + <h1 class="hidden">Help</h1> + + <div class="shortcuts"> + <h2>Keyboard Shortcuts</h2> + + <dl> + <dt>?</dt> + <dd>Show this help dialog</dd> + <dt>S</dt> + <dd>Focus the search field</dd> + <dt>⇤</dt> + <dd>Move up in search results</dd> + <dt>⇥</dt> + <dd>Move down in search results</dd> + <dt>⏎</dt> + <dd>Go to active search result</dd> + <dt>+</dt> + <dd>Collapse/expand all sections</dd> + </dl> + </div> + + <div class="infos"> + <h2>Search Tricks</h2> + + <p> + Prefix searches with a type followed by a colon (e.g. + <code>fn:</code>) to restrict the search to a given type. + </p> + + <p> + Accepted types are: <code>fn</code>, <code>mod</code>, + <code>struct</code>, <code>enum</code>, + <code>trait</code>, <code>type</code>, <code>macro</code>, + and <code>const</code>. + </p> + + <p> + Search functions by type signature (e.g. + <code>vec -> usize</code> or <code>* -> vec</code>) + </p> + </div> + </div> + </aside> + + + + <script> + window.rootPath = "../../"; + window.currentCrate = "plist"; + </script> + <script src="../../jquery.js"></script> + <script src="../../main.js"></script> + <script defer src="../../search-index.js"></script> +</body> +</html>
\ No newline at end of file diff --git a/plist/xml/writer/EventWriter.t.html b/plist/xml/writer/EventWriter.t.html new file mode 100644 index 0000000..ab9a414 --- /dev/null +++ b/plist/xml/writer/EventWriter.t.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta http-equiv="refresh" content="0;URL=struct.EventWriter.html"> +</head> +<body> + <p>Redirecting to <a href="struct.EventWriter.html">struct.EventWriter.html</a>...</p> + <script>location.replace("struct.EventWriter.html" + location.search + location.hash);</script> +</body> +</html>
\ No newline at end of file diff --git a/plist/xml/writer/struct.EventWriter.html b/plist/xml/writer/struct.EventWriter.html new file mode 100644 index 0000000..97304b0 --- /dev/null +++ b/plist/xml/writer/struct.EventWriter.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta http-equiv="refresh" content="0;URL=../../../plist/xml/struct.EventWriter.html"> +</head> +<body> + <p>Redirecting to <a href="../../../plist/xml/struct.EventWriter.html">../../../plist/xml/struct.EventWriter.html</a>...</p> + <script>location.replace("../../../plist/xml/struct.EventWriter.html" + location.search + location.hash);</script> +</body> +</html>
\ No newline at end of file diff --git a/rustdoc.css b/rustdoc.css new file mode 100644 index 0000000..f49b855 --- /dev/null +++ b/rustdoc.css @@ -0,0 +1,755 @@ +@import "normalize.css"; + +/** + * Copyright 2013 The Rust Project Developers. See the COPYRIGHT + * file at the top-level directory of this distribution and at + * http://rust-lang.org/COPYRIGHT. + * + * Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or + * http://www.apache.org/licenses/LICENSE-2.0> or the MIT license + * <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your + * option. This file may not be copied, modified, or distributed + * except according to those terms. + */ + +/* See FiraSans-LICENSE.txt for the Fira Sans license. */ +@font-face { + font-family: 'Fira Sans'; + font-style: normal; + font-weight: 400; + src: local('Fira Sans'), url("FiraSans-Regular.woff") format('woff'); +} +@font-face { + font-family: 'Fira Sans'; + font-style: normal; + font-weight: 500; + src: local('Fira Sans Medium'), url("FiraSans-Medium.woff") format('woff'); +} + +/* See SourceSerifPro-LICENSE.txt for the Source Serif Pro license and + * Heuristica-LICENSE.txt for the Heuristica license. */ +@font-face { + font-family: 'Source Serif Pro'; + font-style: normal; + font-weight: 400; + src: local('Source Serif Pro'), url("SourceSerifPro-Regular.woff") format('woff'); +} +@font-face { + font-family: 'Source Serif Pro'; + font-style: italic; + font-weight: 400; + src: url("Heuristica-Italic.woff") format('woff'); +} +@font-face { + font-family: 'Source Serif Pro'; + font-style: normal; + font-weight: 700; + src: local('Source Serif Pro Bold'), url("SourceSerifPro-Bold.woff") format('woff'); +} + +/* See SourceCodePro-LICENSE.txt for the Source Code Pro license. */ +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 400; + src: local('Source Code Pro'), url("SourceCodePro-Regular.woff") format('woff'); +} +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 600; + src: local('Source Code Pro Semibold'), url("SourceCodePro-Semibold.woff") format('woff'); +} + +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* General structure and fonts */ + +body { + font: 16px/1.4 "Source Serif Pro", Georgia, Times, "Times New Roman", serif; + margin: 0; + position: relative; + padding: 10px 15px 20px 15px; + + -webkit-font-feature-settings: "kern", "liga"; + -moz-font-feature-settings: "kern", "liga"; + font-feature-settings: "kern", "liga"; +} + +h1 { + font-size: 1.5em; +} +h2 { + font-size: 1.4em; +} +h3 { + font-size: 1.3em; +} +h1, h2, h3:not(.impl):not(.method):not(.type):not(.tymethod), h4:not(.method):not(.type):not(.tymethod) { + font-weight: 500; + margin: 20px 0 15px 0; + padding-bottom: 6px; +} +h1.fqn { + border-bottom: 1px dashed; + margin-top: 0; + position: relative; +} +h2, h3:not(.impl):not(.method):not(.type):not(.tymethod), h4:not(.method):not(.type):not(.tymethod) { + border-bottom: 1px solid; +} +h3.impl, h3.method, h4.method, h3.type, h4.type { + font-weight: 600; + margin-top: 10px; + margin-bottom: 10px; + position: relative; +} +h3.impl, h3.method, h3.type { + margin-top: 15px; +} +h1, h2, h3, h4, .sidebar, a.source, .search-input, .content table :not(code)>a, .collapse-toggle { + font-family: "Fira Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +ol, ul { + padding-left: 25px; +} +ul ul, ol ul, ul ol, ol ol { + margin-bottom: 0; +} + +p { + margin: 0 0 .6em 0; +} + +code, pre { + font-family: "Source Code Pro", Menlo, Monaco, Consolas, "DejaVu Sans Mono", Inconsolata, monospace; + white-space: pre-wrap; +} +.docblock code, .docblock-short code { + border-radius: 3px; + padding: 0 0.2em; +} +.docblock pre code, .docblock-short pre code { + padding: 0; +} +pre { + padding: 14px; +} + +.source pre { + padding: 20px; +} + +img { + max-width: 100%; +} + +.content.source { + margin-top: 50px; + max-width: none; + overflow: visible; + margin-left: 0px; + min-width: 70em; +} + +nav.sub { + font-size: 16px; + text-transform: uppercase; +} + +.sidebar { + width: 200px; + position: absolute; + left: 0; + top: 0; + min-height: 100%; +} + +.content, nav { max-width: 960px; } + +/* Everything else */ + +.js-only, .hidden { display: none !important; } + +.sidebar { + padding: 10px; +} +.sidebar img { + margin: 20px auto; + display: block; +} + +.sidebar .location { + font-size: 17px; + margin: 30px 0 20px 0; + text-align: center; +} + +.location a:first-child { font-weight: 500; } + +.block { + padding: 0 10px; + margin-bottom: 14px; +} +.block h2, .block h3 { + margin-top: 0; + margin-bottom: 8px; + text-align: center; +} +.block ul, .block li { + margin: 0; + padding: 0; + list-style: none; +} + +.block a { + display: block; + text-overflow: ellipsis; + overflow: hidden; + line-height: 15px; + padding: 7px 5px; + font-size: 14px; + font-weight: 300; + transition: border 500ms ease-out; +} + +.content { + padding: 15px 0; +} + +.content.source pre.rust { + white-space: pre; + overflow: auto; + padding-left: 0; +} +.content pre.line-numbers { + float: left; + border: none; + position: relative; + + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.line-numbers span { cursor: pointer; } + +.docblock-short p { + display: inline; +} + +.docblock-short.nowrap { + display: block; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.docblock-short p { + overflow: hidden; + text-overflow: ellipsis; + margin: 0; +} +.docblock-short code { white-space: nowrap; } + +.docblock h1, .docblock h2, .docblock h3, .docblock h4, .docblock h5 { + border-bottom: 1px solid; +} + +.docblock h1 { font-size: 1.3em; } +.docblock h2 { font-size: 1.15em; } +.docblock h3, .docblock h4, .docblock h5 { font-size: 1em; } + +.docblock { + margin-left: 24px; +} + +.content .out-of-band { + font-size: 23px; + margin: 0px; + padding: 0px; + text-align: right; + display: inline-block; + font-weight: normal; + position: absolute; + right: 0; +} + +h3.impl > .out-of-band { + font-size: 21px; +} + +h4 > code, h3 > code, .invisible > code { + position: inherit; +} + +.in-band, code { + z-index: 5; +} + +.invisible { + background: rgba(0, 0, 0, 0); + width: 100%; + display: inline-block; +} + +.content .in-band { + margin: 0px; + padding: 0px; + display: inline-block; +} + +#main { position: relative; } +#main > .since { + top: inherit; + font-family: "Fira Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +.content table { + border-spacing: 0 5px; + border-collapse: separate; +} +.content td { vertical-align: top; } +.content td:first-child { padding-right: 20px; } +.content td p:first-child { margin-top: 0; } +.content td h1, .content td h2 { margin-left: 0; font-size: 1.1em; } + +.docblock table { + border: 1px solid; + margin: .5em 0; + border-collapse: collapse; + width: 100%; +} + +.docblock table td { + padding: .5em; + border-top: 1px dashed; + border-bottom: 1px dashed; +} + +.docblock table th { + padding: .5em; + text-align: left; + border-top: 1px solid; + border-bottom: 1px solid; +} + +.content .item-list { + list-style-type: none; + padding: 0; +} + +.content .item-list li { margin-bottom: 3px; } + +.content .multi-column { + -moz-column-count: 5; + -moz-column-gap: 2.5em; + -webkit-column-count: 5; + -webkit-column-gap: 2.5em; + column-count: 5; + column-gap: 2.5em; +} +.content .multi-column li { width: 100%; display: inline-block; } + +.content .method { + font-size: 1em; + position: relative; +} +/* Shift "where ..." part of method or fn definition down a line */ +.content .method .where, .content .fn .where { display: block; } +/* Bit of whitespace to indent it */ +.content .method .where::before, .content .fn .where::before { content: ' '; } + +.content .methods > div { margin-left: 40px; } + +.content .impl-items .docblock, .content .impl-items .stability { + margin-left: 40px; +} +.content .impl-items .method, .content .impl-items > .type { + margin-left: 20px; +} + +.content .stability code { + font-size: 90%; +} + +/* Shift where in trait listing down a line */ +pre.trait .where::before { + content: '\a '; +} + +nav { + border-bottom: 1px solid; + padding-bottom: 10px; + margin-bottom: 10px; +} +nav.main { + padding: 20px 0; + text-align: center; +} +nav.main .current { + border-top: 1px solid; + border-bottom: 1px solid; +} +nav.main .separator { + border: 1px solid; + display: inline-block; + height: 23px; + margin: 0 20px; +} +nav.sum { text-align: right; } +nav.sub form { display: inline; } + +nav.sub, .content { + margin-left: 230px; +} + +a { + text-decoration: none; + background: transparent; +} + +.docblock a:hover, .docblock-short a:hover, .stability a { + text-decoration: underline; +} + +.content span.enum, .content a.enum, .block a.current.enum { color: #5e9766; } +.content span.struct, .content a.struct, .block a.current.struct { color: #df3600; } +.content span.type, .content a.type, .block a.current.type { color: #e57300; } +.content span.macro, .content a.macro, .block a.current.macro { color: #068000; } +.block a.current.crate { font-weight: 500; } + +.search-input { + width: 100%; + /* Override Normalize.css: we have margins and do + not want to overflow - the `moz` attribute is necessary + until Firefox 29, too early to drop at this point */ + -moz-box-sizing: border-box !important; + box-sizing: border-box !important; + outline: none; + border: none; + border-radius: 1px; + margin-top: 5px; + padding: 10px 16px; + font-size: 17px; + transition: border-color 300ms ease; + transition: border-radius 300ms ease-in-out; + transition: box-shadow 300ms ease-in-out; +} + +.search-input:focus { + border-color: #66afe9; + border-radius: 2px; + border: 0; + outline: 0; + box-shadow: 0 0 8px #078dd8; +} + +.search-results .desc { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + display: block; +} + +.search-results a { + display: block; +} + +.content .search-results td:first-child { padding-right: 0; } +.content .search-results td:first-child a { padding-right: 10px; } + +tr.result span.primitive::after { content: ' (primitive type)'; font-style: italic; color: black; +} + +body.blur > :not(#help) { + filter: blur(8px); + -webkit-filter: blur(8px); + opacity: .7; +} + +#help { + width: 100%; + height: 100vh; + position: fixed; + top: 0; + left: 0; + display: flex; + justify-content: center; + align-items: center; +} +#help > div { + flex: 0 0 auto; + background: #e9e9e9; + box-shadow: 0 0 6px rgba(0,0,0,.2); + width: 550px; + height: 330px; + border: 1px solid #bfbfbf; +} +#help dt { + float: left; + border-radius: 4px; + border: 1px solid #bfbfbf; + background: #fff; + width: 23px; + text-align: center; + clear: left; + display: block; + margin-top: -1px; +} +#help dd { margin: 5px 33px; } +#help .infos { padding-left: 0; } +#help h1, #help h2 { margin-top: 0; } +#help > div div { + width: 50%; + float: left; + padding: 20px; +} + +em.stab { + display: inline-block; + border-width: 1px; + border-style: solid; + padding: 3px; + margin-bottom: 5px; + font-size: 90%; + font-style: normal; +} +em.stab p { + display: inline; +} + +.module-item .stab { + border-width: 0; + padding: 0; + margin: 0; + background: inherit !important; +} + +.module-item.unstable { + opacity: 0.65; +} + +.since { + font-weight: normal; + font-size: initial; + color: grey; + position: absolute; + right: 0; + top: 0; +} + +.variants_table { + width: 100%; +} + +.variants_table tbody tr td:first-child { + width: 1%; /* make the variant name as small as possible */ +} + +td.summary-column { + width: 100%; +} + +.summary { + padding-right: 0px; +} + +.line-numbers :target { background-color: transparent; } + +/* Code highlighting */ +pre.rust .kw { color: #8959A8; } +pre.rust .kw-2, pre.rust .prelude-ty { color: #4271AE; } +pre.rust .number, pre.rust .string { color: #718C00; } +pre.rust .self, pre.rust .bool-val, pre.rust .prelude-val, +pre.rust .attribute, pre.rust .attribute .ident { color: #C82829; } +pre.rust .macro, pre.rust .macro-nonterminal { color: #3E999F; } +pre.rust .lifetime { color: #B76514; } +pre.rust .question-mark { + color: #ff9011; + font-weight: bold; +} + +pre.rust { position: relative; } +a.test-arrow { + background-color: rgba(78, 139, 202, 0.2); + display: inline-block; + position: absolute; + padding: 5px 10px 5px 10px; + border-radius: 5px; + font-size: 130%; + top: 5px; + right: 5px; +} +a.test-arrow:hover{ + background-color: #4e8bca; + text-decoration: none; +} + +.section-header:hover a:after { + content: '\2002\00a7\2002'; +} + +.section-header:hover a { + text-decoration: none; +} + +.section-header a { + color: inherit; +} + +.collapse-toggle { + font-weight: 300; + position: absolute; + left: -23px; + color: #999; + top: 0; +} + +.toggle-wrapper > .collapse-toggle { + left: -24px; + margin-top: 0px; +} + +.toggle-wrapper { + position: relative; +} + +.toggle-wrapper.collapsed { + height: 1em; + transition: height .2s; +} + +.collapse-toggle > .inner { + display: inline-block; + width: 1.2ch; + text-align: center; +} + +.toggle-label { + color: #999; +} + +.ghost { + display: none; +} + +.ghost + .since { + position: initial; + display: table-cell; +} + +.since + .srclink { + display: table-cell; + padding-left: 10px; +} + +span.since { + position: initial; + font-size: 20px; + margin-right: 5px; +} + +.toggle-wrapper > .collapse-toggle { + left: 0; +} + +.variant + .toggle-wrapper > a { + margin-top: 5px; +} + +.enum > .toggle-wrapper + .docblock, .struct > .toggle-wrapper + .docblock { + margin-left: 30px; + margin-bottom: 20px; + margin-top: 5px; +} + +.enum > .collapsed, .struct > .collapsed { + margin-bottom: 25px; +} + +.enum .variant, .struct .structfield { + display: block; +} + +:target > code { + background: #FDFFD3; + opacity: 1; +} + +/* Media Queries */ + +@media (max-width: 700px) { + body { + padding-top: 0px; + } + + .sidebar { + height: 40px; + min-height: 40px; + width: 100%; + margin: 0px; + padding: 0px; + position: static; + } + + .sidebar .location { + float: right; + margin: 0px; + padding: 3px 10px 1px 10px; + min-height: 39px; + background: inherit; + text-align: left; + font-size: 24px; + } + + .sidebar .location:empty { + padding: 0; + } + + .sidebar img { + width: 35px; + margin-top: 5px; + margin-bottom: 0px; + float: left; + } + + nav.sub { + margin: 0 auto; + } + + .sidebar .block { + display: none; + } + + .content { + margin-left: 0px; + } + + .content .in-band { + width: 100%; + } + + .content .out-of-band { + display: none; + } + + .toggle-wrapper > .collapse-toggle { + left: 0px; + } + + .toggle-wrapper { + height: 1.5em; + } +} + +@media print { + nav.sub, .content .out-of-band, .collapse-toggle { + display: none; + } +} diff --git a/search-index.js b/search-index.js new file mode 100644 index 0000000..4945d39 --- /dev/null +++ b/search-index.js @@ -0,0 +1,3 @@ +var searchIndex = {}; +searchIndex["plist"] = {"doc":"# Plist","items":[[3,"Deserializer","plist","",null,null],[3,"Serializer","","",null,null],[3,"EventReader","","",null,null],[4,"Plist","","",null,null],[13,"Array","","",0,null],[13,"Dictionary","","",0,null],[13,"Boolean","","",0,null],[13,"Data","","",0,null],[13,"Date","","",0,null],[13,"Real","","",0,null],[13,"Integer","","",0,null],[13,"String","","",0,null],[4,"PlistEvent","","An encoding of a plist as a flat structure.",null,null],[13,"StartArray","","",1,null],[13,"EndArray","","",1,null],[13,"StartDictionary","","",1,null],[13,"EndDictionary","","",1,null],[13,"BooleanValue","","",1,null],[13,"DataValue","","",1,null],[13,"DateValue","","",1,null],[13,"IntegerValue","","",1,null],[13,"RealValue","","",1,null],[13,"StringValue","","",1,null],[4,"Error","","",null,null],[13,"InvalidData","","",2,null],[13,"UnexpectedEof","","",2,null],[13,"Io","","",2,null],[13,"Serde","","",2,null],[5,"deserialize","","",null,{"inputs":[{"name":"r"}],"output":{"name":"result"}}],[5,"serialize_to_xml","","",null,{"inputs":[{"name":"w"},{"name":"t"}],"output":{"name":"result"}}],[0,"binary","","",null,null],[3,"EventReader","plist::binary","https://opensource.apple.com/source/CF/CF-550/CFBinaryPList.c\nhttps://hg.python.org/cpython/file/3.4/Lib/plistlib.py",null,null],[11,"from","plist","",2,{"inputs":[{"name":"fromutf8error"}],"output":{"name":"error"}}],[11,"from","","",2,{"inputs":[{"name":"fromutf16error"}],"output":{"name":"error"}}],[11,"new","plist::binary","",3,{"inputs":[{"name":"r"}],"output":{"name":"eventreader"}}],[11,"next","","",3,null],[0,"xml","plist","",null,null],[3,"EventReader","plist::xml","",null,null],[3,"EventWriter","","",null,null],[11,"from","plist","",2,{"inputs":[{"name":"chronoparseerror"}],"output":{"name":"error"}}],[11,"new","plist::xml","",4,{"inputs":[{"name":"r"}],"output":{"name":"eventreader"}}],[11,"next","","",4,null],[11,"from","plist","",2,{"inputs":[{"name":"xmlwritererror"}],"output":{"name":"error"}}],[11,"new","plist::xml","",5,{"inputs":[{"name":"w"}],"output":{"name":"eventwriter"}}],[11,"write","","",5,null],[11,"write","","",5,null],[11,"custom","plist","",2,{"inputs":[{"name":"t"}],"output":{"name":"self"}}],[11,"end_of_stream","","",2,{"inputs":[],"output":{"name":"self"}}],[11,"new","","",6,{"inputs":[{"name":"i"}],"output":{"name":"deserializer"}}],[11,"deserialize","","",6,null],[11,"deserialize_unit","","",6,null],[11,"deserialize_option","","",6,null],[11,"deserialize_newtype_struct","","",6,null],[11,"deserialize_enum","","",6,null],[11,"visit_variant","","",6,null],[11,"visit_unit","","",6,null],[11,"visit_newtype","","",6,null],[11,"visit_tuple","","",6,null],[11,"visit_struct","","",6,null],[11,"custom","","",2,{"inputs":[{"name":"t"}],"output":{"name":"self"}}],[11,"invalid_value","","",2,{"inputs":[{"name":"str"}],"output":{"name":"self"}}],[11,"new","","",7,{"inputs":[{"name":"w"}],"output":{"name":"serializer"}}],[11,"into_inner","","",7,null],[11,"serialize_bool","","",7,null],[11,"serialize_i64","","",7,null],[11,"serialize_u64","","",7,null],[11,"serialize_f64","","",7,null],[11,"serialize_str","","",7,null],[11,"serialize_bytes","","",7,null],[11,"serialize_unit","","",7,null],[11,"serialize_none","","",7,null],[11,"serialize_some","","",7,null],[11,"serialize_seq","","",7,null],[11,"serialize_seq_elt","","",7,null],[11,"serialize_map","","",7,null],[11,"serialize_map_elt","","",7,null],[11,"serialize_unit_variant","","",7,null],[11,"serialize_newtype_struct","","",7,null],[11,"serialize_newtype_variant","","",7,null],[11,"serialize_tuple_variant","","",7,null],[11,"serialize_struct_variant","","",7,null],[6,"Result","","",null,null],[8,"EventWriter","","",null,null],[10,"write","","",8,null],[11,"clone","","",0,null],[11,"fmt","","",0,null],[11,"eq","","",0,null],[11,"ne","","",0,null],[11,"read","","",0,{"inputs":[{"name":"r"}],"output":{"name":"result"}}],[11,"from_events","","",0,{"inputs":[{"name":"t"}],"output":{"name":"result"}}],[11,"into_events","","",0,null],[11,"into_rustc_serialize_json","","",0,null],[11,"as_array","","If the `Plist` is an Array, returns the associated Vec.\nReturns None otherwise.",0,null],[11,"as_array_mut","","If the `Plist` is an Array, returns the associated mutable Vec.\nReturns None otherwise.",0,null],[11,"as_dictionary","","If the `Plist` is a Dictionary, returns the associated BTreeMap.\nReturns None otherwise.",0,null],[11,"as_dictionary_mut","","If the `Plist` is a Dictionary, returns the associated mutable BTreeMap.\nReturns None otherwise.",0,null],[11,"as_boolean","","If the `Plist` is a Boolean, returns the associated bool.\nReturns None otherwise.",0,null],[11,"into_data","","If the `Plist` is a Data, returns the underlying Vec.\nReturns None otherwise.",0,null],[11,"as_data","","If the `Plist` is a Data, returns the associated Vec.\nReturns None otherwise.",0,null],[11,"as_date","","If the `Plist` is a Date, returns the associated DateTime.\nReturns None otherwise.",0,null],[11,"as_real","","If the `Plist` is a Real, returns the associated f64.\nReturns None otherwise.",0,null],[11,"as_integer","","If the `Plist` is an Integer, returns the associated i64.\nReturns None otherwise.",0,null],[11,"into_string","","If the `Plist` is a String, returns the underlying String.\nReturns None otherwise.",0,null],[11,"as_string","","If the `Plist` is a String, returns the associated str.\nReturns None otherwise.",0,null],[11,"from","","",0,{"inputs":[{"name":"vec"}],"output":{"name":"plist"}}],[11,"from","","",0,{"inputs":[{"name":"btreemap"}],"output":{"name":"plist"}}],[11,"from","","",0,{"inputs":[{"name":"bool"}],"output":{"name":"plist"}}],[11,"from","","",0,{"inputs":[{"name":"bool"}],"output":{"name":"plist"}}],[11,"from","","",0,{"inputs":[{"name":"datetime"}],"output":{"name":"plist"}}],[11,"from","","",0,{"inputs":[{"name":"datetime"}],"output":{"name":"plist"}}],[11,"from","","",0,{"inputs":[{"name":"f64"}],"output":{"name":"plist"}}],[11,"from","","",0,{"inputs":[{"name":"f32"}],"output":{"name":"plist"}}],[11,"from","","",0,{"inputs":[{"name":"i64"}],"output":{"name":"plist"}}],[11,"from","","",0,{"inputs":[{"name":"i32"}],"output":{"name":"plist"}}],[11,"from","","",0,{"inputs":[{"name":"i16"}],"output":{"name":"plist"}}],[11,"from","","",0,{"inputs":[{"name":"i8"}],"output":{"name":"plist"}}],[11,"from","","",0,{"inputs":[{"name":"u32"}],"output":{"name":"plist"}}],[11,"from","","",0,{"inputs":[{"name":"u16"}],"output":{"name":"plist"}}],[11,"from","","",0,{"inputs":[{"name":"u8"}],"output":{"name":"plist"}}],[11,"from","","",0,{"inputs":[{"name":"f64"}],"output":{"name":"plist"}}],[11,"from","","",0,{"inputs":[{"name":"f32"}],"output":{"name":"plist"}}],[11,"from","","",0,{"inputs":[{"name":"i64"}],"output":{"name":"plist"}}],[11,"from","","",0,{"inputs":[{"name":"i32"}],"output":{"name":"plist"}}],[11,"from","","",0,{"inputs":[{"name":"i16"}],"output":{"name":"plist"}}],[11,"from","","",0,{"inputs":[{"name":"i8"}],"output":{"name":"plist"}}],[11,"from","","",0,{"inputs":[{"name":"u32"}],"output":{"name":"plist"}}],[11,"from","","",0,{"inputs":[{"name":"u16"}],"output":{"name":"plist"}}],[11,"from","","",0,{"inputs":[{"name":"u8"}],"output":{"name":"plist"}}],[11,"from","","",0,{"inputs":[{"name":"string"}],"output":{"name":"plist"}}],[11,"from","","",0,{"inputs":[{"name":"str"}],"output":{"name":"plist"}}],[11,"clone","","",1,null],[11,"fmt","","",1,null],[11,"eq","","",1,null],[11,"ne","","",1,null],[11,"fmt","","",2,null],[11,"description","","",2,null],[11,"cause","","",2,null],[11,"fmt","","",2,null],[11,"from","","",2,{"inputs":[{"name":"ioerror"}],"output":{"name":"error"}}],[11,"new","","",9,{"inputs":[{"name":"r"}],"output":{"name":"eventreader"}}],[11,"next","","",9,null]],"paths":[[4,"Plist"],[4,"PlistEvent"],[4,"Error"],[3,"EventReader"],[3,"EventReader"],[3,"EventWriter"],[3,"Deserializer"],[3,"Serializer"],[8,"EventWriter"],[3,"EventReader"]]}; +initSearch(searchIndex); diff --git a/src/plist/src/binary/mod.rs.html b/src/plist/src/binary/mod.rs.html new file mode 100644 index 0000000..8fe81c2 --- /dev/null +++ b/src/plist/src/binary/mod.rs.html @@ -0,0 +1,114 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="generator" content="rustdoc"> + <meta name="description" content="Source to the Rust file `src/binary/mod.rs`."> + <meta name="keywords" content="rust, rustlang, rust-lang"> + + <title>mod.rs.html -- source</title> + + <link rel="stylesheet" type="text/css" href="../../../../rustdoc.css"> + <link rel="stylesheet" type="text/css" href="../../../../main.css"> + + + + +</head> +<body class="rustdoc"> + <!--[if lte IE 8]> + <div class="warning"> + This old browser is unsupported and will most likely display funky + things. + </div> + <![endif]--> + + + + <nav class="sidebar"> + + + </nav> + + <nav class="sub"> + <form class="search-form js-only"> + <div class="search-container"> + <input class="search-input" name="search" + autocomplete="off" + placeholder="Click or press ‘S’ to search, ‘?’ for more options…" + type="search"> + </div> + </form> + </nav> + + <section id='main' class="content source"><pre class="line-numbers"><span id="1">1</span> +<span id="2">2</span> +<span id="3">3</span> +</pre><pre class='rust '> +<span class='kw'>mod</span> <span class='ident'>reader</span>; + +<span class='kw'>pub</span> <span class='kw'>use</span> <span class='self'>self</span>::<span class='ident'>reader</span>::<span class='ident'>EventReader</span>; +</pre> +</section> + <section id='search' class="content hidden"></section> + + <section class="footer"></section> + + <aside id="help" class="hidden"> + <div> + <h1 class="hidden">Help</h1> + + <div class="shortcuts"> + <h2>Keyboard Shortcuts</h2> + + <dl> + <dt>?</dt> + <dd>Show this help dialog</dd> + <dt>S</dt> + <dd>Focus the search field</dd> + <dt>⇤</dt> + <dd>Move up in search results</dd> + <dt>⇥</dt> + <dd>Move down in search results</dd> + <dt>⏎</dt> + <dd>Go to active search result</dd> + <dt>+</dt> + <dd>Collapse/expand all sections</dd> + </dl> + </div> + + <div class="infos"> + <h2>Search Tricks</h2> + + <p> + Prefix searches with a type followed by a colon (e.g. + <code>fn:</code>) to restrict the search to a given type. + </p> + + <p> + Accepted types are: <code>fn</code>, <code>mod</code>, + <code>struct</code>, <code>enum</code>, + <code>trait</code>, <code>type</code>, <code>macro</code>, + and <code>const</code>. + </p> + + <p> + Search functions by type signature (e.g. + <code>vec -> usize</code> or <code>* -> vec</code>) + </p> + </div> + </div> + </aside> + + + + <script> + window.rootPath = "../../../../"; + window.currentCrate = "plist"; + </script> + <script src="../../../../jquery.js"></script> + <script src="../../../../main.js"></script> + <script defer src="../../../../search-index.js"></script> +</body> +</html>
\ No newline at end of file diff --git a/src/plist/src/binary/reader.rs.html b/src/plist/src/binary/reader.rs.html new file mode 100644 index 0000000..dee0f96 --- /dev/null +++ b/src/plist/src/binary/reader.rs.html @@ -0,0 +1,814 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="generator" content="rustdoc"> + <meta name="description" content="Source to the Rust file `src/binary/reader.rs`."> + <meta name="keywords" content="rust, rustlang, rust-lang"> + + <title>reader.rs.html -- source</title> + + <link rel="stylesheet" type="text/css" href="../../../../rustdoc.css"> + <link rel="stylesheet" type="text/css" href="../../../../main.css"> + + + + +</head> +<body class="rustdoc"> + <!--[if lte IE 8]> + <div class="warning"> + This old browser is unsupported and will most likely display funky + things. + </div> + <![endif]--> + + + + <nav class="sidebar"> + + + </nav> + + <nav class="sub"> + <form class="search-form js-only"> + <div class="search-container"> + <input class="search-input" name="search" + autocomplete="off" + placeholder="Click or press ‘S’ to search, ‘?’ for more options…" + type="search"> + </div> + </form> + </nav> + + <section id='main' class="content source"><pre class="line-numbers"><span id="1"> 1</span> +<span id="2"> 2</span> +<span id="3"> 3</span> +<span id="4"> 4</span> +<span id="5"> 5</span> +<span id="6"> 6</span> +<span id="7"> 7</span> +<span id="8"> 8</span> +<span id="9"> 9</span> +<span id="10"> 10</span> +<span id="11"> 11</span> +<span id="12"> 12</span> +<span id="13"> 13</span> +<span id="14"> 14</span> +<span id="15"> 15</span> +<span id="16"> 16</span> +<span id="17"> 17</span> +<span id="18"> 18</span> +<span id="19"> 19</span> +<span id="20"> 20</span> +<span id="21"> 21</span> +<span id="22"> 22</span> +<span id="23"> 23</span> +<span id="24"> 24</span> +<span id="25"> 25</span> +<span id="26"> 26</span> +<span id="27"> 27</span> +<span id="28"> 28</span> +<span id="29"> 29</span> +<span id="30"> 30</span> +<span id="31"> 31</span> +<span id="32"> 32</span> +<span id="33"> 33</span> +<span id="34"> 34</span> +<span id="35"> 35</span> +<span id="36"> 36</span> +<span id="37"> 37</span> +<span id="38"> 38</span> +<span id="39"> 39</span> +<span id="40"> 40</span> +<span id="41"> 41</span> +<span id="42"> 42</span> +<span id="43"> 43</span> +<span id="44"> 44</span> +<span id="45"> 45</span> +<span id="46"> 46</span> +<span id="47"> 47</span> +<span id="48"> 48</span> +<span id="49"> 49</span> +<span id="50"> 50</span> +<span id="51"> 51</span> +<span id="52"> 52</span> +<span id="53"> 53</span> +<span id="54"> 54</span> +<span id="55"> 55</span> +<span id="56"> 56</span> +<span id="57"> 57</span> +<span id="58"> 58</span> +<span id="59"> 59</span> +<span id="60"> 60</span> +<span id="61"> 61</span> +<span id="62"> 62</span> +<span id="63"> 63</span> +<span id="64"> 64</span> +<span id="65"> 65</span> +<span id="66"> 66</span> +<span id="67"> 67</span> +<span id="68"> 68</span> +<span id="69"> 69</span> +<span id="70"> 70</span> +<span id="71"> 71</span> +<span id="72"> 72</span> +<span id="73"> 73</span> +<span id="74"> 74</span> +<span id="75"> 75</span> +<span id="76"> 76</span> +<span id="77"> 77</span> +<span id="78"> 78</span> +<span id="79"> 79</span> +<span id="80"> 80</span> +<span id="81"> 81</span> +<span id="82"> 82</span> +<span id="83"> 83</span> +<span id="84"> 84</span> +<span id="85"> 85</span> +<span id="86"> 86</span> +<span id="87"> 87</span> +<span id="88"> 88</span> +<span id="89"> 89</span> +<span id="90"> 90</span> +<span id="91"> 91</span> +<span id="92"> 92</span> +<span id="93"> 93</span> +<span id="94"> 94</span> +<span id="95"> 95</span> +<span id="96"> 96</span> +<span id="97"> 97</span> +<span id="98"> 98</span> +<span id="99"> 99</span> +<span id="100">100</span> +<span id="101">101</span> +<span id="102">102</span> +<span id="103">103</span> +<span id="104">104</span> +<span id="105">105</span> +<span id="106">106</span> +<span id="107">107</span> +<span id="108">108</span> +<span id="109">109</span> +<span id="110">110</span> +<span id="111">111</span> +<span id="112">112</span> +<span id="113">113</span> +<span id="114">114</span> +<span id="115">115</span> +<span id="116">116</span> +<span id="117">117</span> +<span id="118">118</span> +<span id="119">119</span> +<span id="120">120</span> +<span id="121">121</span> +<span id="122">122</span> +<span id="123">123</span> +<span id="124">124</span> +<span id="125">125</span> +<span id="126">126</span> +<span id="127">127</span> +<span id="128">128</span> +<span id="129">129</span> +<span id="130">130</span> +<span id="131">131</span> +<span id="132">132</span> +<span id="133">133</span> +<span id="134">134</span> +<span id="135">135</span> +<span id="136">136</span> +<span id="137">137</span> +<span id="138">138</span> +<span id="139">139</span> +<span id="140">140</span> +<span id="141">141</span> +<span id="142">142</span> +<span id="143">143</span> +<span id="144">144</span> +<span id="145">145</span> +<span id="146">146</span> +<span id="147">147</span> +<span id="148">148</span> +<span id="149">149</span> +<span id="150">150</span> +<span id="151">151</span> +<span id="152">152</span> +<span id="153">153</span> +<span id="154">154</span> +<span id="155">155</span> +<span id="156">156</span> +<span id="157">157</span> +<span id="158">158</span> +<span id="159">159</span> +<span id="160">160</span> +<span id="161">161</span> +<span id="162">162</span> +<span id="163">163</span> +<span id="164">164</span> +<span id="165">165</span> +<span id="166">166</span> +<span id="167">167</span> +<span id="168">168</span> +<span id="169">169</span> +<span id="170">170</span> +<span id="171">171</span> +<span id="172">172</span> +<span id="173">173</span> +<span id="174">174</span> +<span id="175">175</span> +<span id="176">176</span> +<span id="177">177</span> +<span id="178">178</span> +<span id="179">179</span> +<span id="180">180</span> +<span id="181">181</span> +<span id="182">182</span> +<span id="183">183</span> +<span id="184">184</span> +<span id="185">185</span> +<span id="186">186</span> +<span id="187">187</span> +<span id="188">188</span> +<span id="189">189</span> +<span id="190">190</span> +<span id="191">191</span> +<span id="192">192</span> +<span id="193">193</span> +<span id="194">194</span> +<span id="195">195</span> +<span id="196">196</span> +<span id="197">197</span> +<span id="198">198</span> +<span id="199">199</span> +<span id="200">200</span> +<span id="201">201</span> +<span id="202">202</span> +<span id="203">203</span> +<span id="204">204</span> +<span id="205">205</span> +<span id="206">206</span> +<span id="207">207</span> +<span id="208">208</span> +<span id="209">209</span> +<span id="210">210</span> +<span id="211">211</span> +<span id="212">212</span> +<span id="213">213</span> +<span id="214">214</span> +<span id="215">215</span> +<span id="216">216</span> +<span id="217">217</span> +<span id="218">218</span> +<span id="219">219</span> +<span id="220">220</span> +<span id="221">221</span> +<span id="222">222</span> +<span id="223">223</span> +<span id="224">224</span> +<span id="225">225</span> +<span id="226">226</span> +<span id="227">227</span> +<span id="228">228</span> +<span id="229">229</span> +<span id="230">230</span> +<span id="231">231</span> +<span id="232">232</span> +<span id="233">233</span> +<span id="234">234</span> +<span id="235">235</span> +<span id="236">236</span> +<span id="237">237</span> +<span id="238">238</span> +<span id="239">239</span> +<span id="240">240</span> +<span id="241">241</span> +<span id="242">242</span> +<span id="243">243</span> +<span id="244">244</span> +<span id="245">245</span> +<span id="246">246</span> +<span id="247">247</span> +<span id="248">248</span> +<span id="249">249</span> +<span id="250">250</span> +<span id="251">251</span> +<span id="252">252</span> +<span id="253">253</span> +<span id="254">254</span> +<span id="255">255</span> +<span id="256">256</span> +<span id="257">257</span> +<span id="258">258</span> +<span id="259">259</span> +<span id="260">260</span> +<span id="261">261</span> +<span id="262">262</span> +<span id="263">263</span> +<span id="264">264</span> +<span id="265">265</span> +<span id="266">266</span> +<span id="267">267</span> +<span id="268">268</span> +<span id="269">269</span> +<span id="270">270</span> +<span id="271">271</span> +<span id="272">272</span> +<span id="273">273</span> +<span id="274">274</span> +<span id="275">275</span> +<span id="276">276</span> +<span id="277">277</span> +<span id="278">278</span> +<span id="279">279</span> +<span id="280">280</span> +<span id="281">281</span> +<span id="282">282</span> +<span id="283">283</span> +<span id="284">284</span> +<span id="285">285</span> +<span id="286">286</span> +<span id="287">287</span> +<span id="288">288</span> +<span id="289">289</span> +<span id="290">290</span> +<span id="291">291</span> +<span id="292">292</span> +<span id="293">293</span> +<span id="294">294</span> +<span id="295">295</span> +<span id="296">296</span> +<span id="297">297</span> +<span id="298">298</span> +<span id="299">299</span> +<span id="300">300</span> +<span id="301">301</span> +<span id="302">302</span> +<span id="303">303</span> +<span id="304">304</span> +<span id="305">305</span> +<span id="306">306</span> +<span id="307">307</span> +<span id="308">308</span> +<span id="309">309</span> +<span id="310">310</span> +<span id="311">311</span> +<span id="312">312</span> +<span id="313">313</span> +<span id="314">314</span> +<span id="315">315</span> +<span id="316">316</span> +<span id="317">317</span> +<span id="318">318</span> +<span id="319">319</span> +<span id="320">320</span> +<span id="321">321</span> +<span id="322">322</span> +<span id="323">323</span> +<span id="324">324</span> +<span id="325">325</span> +<span id="326">326</span> +<span id="327">327</span> +<span id="328">328</span> +<span id="329">329</span> +<span id="330">330</span> +<span id="331">331</span> +<span id="332">332</span> +<span id="333">333</span> +<span id="334">334</span> +<span id="335">335</span> +<span id="336">336</span> +<span id="337">337</span> +<span id="338">338</span> +<span id="339">339</span> +<span id="340">340</span> +<span id="341">341</span> +<span id="342">342</span> +<span id="343">343</span> +<span id="344">344</span> +<span id="345">345</span> +<span id="346">346</span> +<span id="347">347</span> +<span id="348">348</span> +<span id="349">349</span> +<span id="350">350</span> +<span id="351">351</span> +<span id="352">352</span> +<span id="353">353</span> +</pre><pre class='rust '> +<span class='kw'>use</span> <span class='ident'>byteorder</span>::{<span class='ident'>BigEndian</span>, <span class='ident'>ReadBytesExt</span>}; +<span class='kw'>use</span> <span class='ident'>chrono</span>::{<span class='ident'>TimeZone</span>, <span class='ident'>UTC</span>}; +<span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>io</span>::{<span class='ident'>Cursor</span>, <span class='ident'>Read</span>, <span class='ident'>Seek</span>, <span class='ident'>SeekFrom</span>}; +<span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>string</span>::{<span class='ident'>FromUtf8Error</span>, <span class='ident'>FromUtf16Error</span>}; + +<span class='kw'>use</span> {<span class='ident'>Error</span>, <span class='prelude-ty'>Result</span>, <span class='ident'>PlistEvent</span>, <span class='ident'>u64_to_usize</span>}; + +<span class='kw'>impl</span> <span class='ident'>From</span><span class='op'><</span><span class='ident'>FromUtf8Error</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>Error</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(_: <span class='ident'>FromUtf8Error</span>) <span class='op'>-></span> <span class='ident'>Error</span> { + <span class='ident'>Error</span>::<span class='ident'>InvalidData</span> + } +} + +<span class='kw'>impl</span> <span class='ident'>From</span><span class='op'><</span><span class='ident'>FromUtf16Error</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>Error</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(_: <span class='ident'>FromUtf16Error</span>) <span class='op'>-></span> <span class='ident'>Error</span> { + <span class='ident'>Error</span>::<span class='ident'>InvalidData</span> + } +} + +<span class='kw'>struct</span> <span class='ident'>StackItem</span> { + <span class='ident'>object_refs</span>: <span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u64</span><span class='op'>></span>, + <span class='ident'>ty</span>: <span class='ident'>StackType</span>, +} + +<span class='kw'>enum</span> <span class='ident'>StackType</span> { + <span class='ident'>Array</span>, + <span class='ident'>Dict</span>, + <span class='ident'>Root</span>, +} + +<span class='doccomment'>/// https://opensource.apple.com/source/CF/CF-550/CFBinaryPList.c</span> +<span class='doccomment'>/// https://hg.python.org/cpython/file/3.4/Lib/plistlib.py</span> +<span class='kw'>pub</span> <span class='kw'>struct</span> <span class='ident'>EventReader</span><span class='op'><</span><span class='ident'>R</span><span class='op'>></span> { + <span class='ident'>stack</span>: <span class='ident'>Vec</span><span class='op'><</span><span class='ident'>StackItem</span><span class='op'>></span>, + <span class='ident'>object_offsets</span>: <span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u64</span><span class='op'>></span>, + <span class='ident'>reader</span>: <span class='ident'>R</span>, + <span class='ident'>ref_size</span>: <span class='ident'>u8</span>, + <span class='ident'>finished</span>: <span class='ident'>bool</span>, +} + +<span class='kw'>impl</span><span class='op'><</span><span class='ident'>R</span>: <span class='ident'>Read</span> <span class='op'>+</span> <span class='ident'>Seek</span><span class='op'>></span> <span class='ident'>EventReader</span><span class='op'><</span><span class='ident'>R</span><span class='op'>></span> { + <span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>new</span>(<span class='ident'>reader</span>: <span class='ident'>R</span>) <span class='op'>-></span> <span class='ident'>EventReader</span><span class='op'><</span><span class='ident'>R</span><span class='op'>></span> { + <span class='ident'>EventReader</span> { + <span class='ident'>stack</span>: <span class='ident'>Vec</span>::<span class='ident'>new</span>(), + <span class='ident'>object_offsets</span>: <span class='ident'>Vec</span>::<span class='ident'>new</span>(), + <span class='ident'>reader</span>: <span class='ident'>reader</span>, + <span class='ident'>ref_size</span>: <span class='number'>0</span>, + <span class='ident'>finished</span>: <span class='bool-val'>false</span>, + } + } + + <span class='kw'>fn</span> <span class='ident'>read_trailer</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>()<span class='op'>></span> { + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>reader</span>.<span class='ident'>seek</span>(<span class='ident'>SeekFrom</span>::<span class='ident'>Start</span>(<span class='number'>0</span>))); + <span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>magic</span> <span class='op'>=</span> [<span class='number'>0</span>; <span class='number'>8</span>]; + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>reader</span>.<span class='ident'>read</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='ident'>magic</span>)); + <span class='kw'>if</span> <span class='kw-2'>&</span><span class='ident'>magic</span> <span class='op'>!=</span> <span class='string'>b"bplist00"</span> { + <span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>InvalidData</span>); + } + + <span class='comment'>// Trailer starts with 6 bytes of padding</span> + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>reader</span>.<span class='ident'>seek</span>(<span class='ident'>SeekFrom</span>::<span class='ident'>End</span>(<span class='op'>-</span><span class='number'>32</span> <span class='op'>+</span> <span class='number'>6</span>))); + <span class='kw'>let</span> <span class='ident'>offset_size</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>reader</span>.<span class='ident'>read_u8</span>()); + <span class='self'>self</span>.<span class='ident'>ref_size</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>reader</span>.<span class='ident'>read_u8</span>()); + <span class='kw'>let</span> <span class='ident'>num_objects</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>reader</span>.<span class='ident'>read_u64</span>::<span class='op'><</span><span class='ident'>BigEndian</span><span class='op'>></span>()); + <span class='kw'>let</span> <span class='ident'>top_object</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>reader</span>.<span class='ident'>read_u64</span>::<span class='op'><</span><span class='ident'>BigEndian</span><span class='op'>></span>()); + <span class='kw'>let</span> <span class='ident'>offset_table_offset</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>reader</span>.<span class='ident'>read_u64</span>::<span class='op'><</span><span class='ident'>BigEndian</span><span class='op'>></span>()); + + <span class='comment'>// Read offset table</span> + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>reader</span>.<span class='ident'>seek</span>(<span class='ident'>SeekFrom</span>::<span class='ident'>Start</span>(<span class='ident'>offset_table_offset</span>))); + <span class='self'>self</span>.<span class='ident'>object_offsets</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>read_ints</span>(<span class='ident'>num_objects</span>, <span class='ident'>offset_size</span>)); + + <span class='comment'>// Seek to top object</span> + <span class='self'>self</span>.<span class='ident'>stack</span>.<span class='ident'>push</span>(<span class='ident'>StackItem</span> { + <span class='ident'>object_refs</span>: <span class='macro'>vec</span><span class='macro'>!</span>[<span class='ident'>top_object</span>], + <span class='ident'>ty</span>: <span class='ident'>StackType</span>::<span class='ident'>Root</span>, + }); + + <span class='prelude-val'>Ok</span>(()) + } + + <span class='kw'>fn</span> <span class='ident'>read_ints</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>len</span>: <span class='ident'>u64</span>, <span class='ident'>size</span>: <span class='ident'>u8</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u64</span><span class='op'>>></span> { + <span class='kw'>let</span> <span class='ident'>len</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>u64_to_usize</span>(<span class='ident'>len</span>)); + <span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>ints</span> <span class='op'>=</span> <span class='ident'>Vec</span>::<span class='ident'>with_capacity</span>(<span class='ident'>len</span>); + <span class='comment'>// TODO: Is the match hoisted out of the loop?</span> + <span class='kw'>for</span> _ <span class='kw'>in</span> <span class='number'>0</span>..<span class='ident'>len</span> { + <span class='kw'>match</span> <span class='ident'>size</span> { + <span class='number'>1</span> <span class='op'>=></span> <span class='ident'>ints</span>.<span class='ident'>push</span>(<span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>reader</span>.<span class='ident'>read_u8</span>()) <span class='kw'>as</span> <span class='ident'>u64</span>), + <span class='number'>2</span> <span class='op'>=></span> <span class='ident'>ints</span>.<span class='ident'>push</span>(<span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>reader</span>.<span class='ident'>read_u16</span>::<span class='op'><</span><span class='ident'>BigEndian</span><span class='op'>></span>()) <span class='kw'>as</span> <span class='ident'>u64</span>), + <span class='number'>4</span> <span class='op'>=></span> <span class='ident'>ints</span>.<span class='ident'>push</span>(<span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>reader</span>.<span class='ident'>read_u32</span>::<span class='op'><</span><span class='ident'>BigEndian</span><span class='op'>></span>()) <span class='kw'>as</span> <span class='ident'>u64</span>), + <span class='number'>8</span> <span class='op'>=></span> <span class='ident'>ints</span>.<span class='ident'>push</span>(<span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>reader</span>.<span class='ident'>read_u64</span>::<span class='op'><</span><span class='ident'>BigEndian</span><span class='op'>></span>()) <span class='kw'>as</span> <span class='ident'>u64</span>), + _ <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>InvalidData</span>), + } + } + <span class='prelude-val'>Ok</span>(<span class='ident'>ints</span>) + } + + <span class='kw'>fn</span> <span class='ident'>read_refs</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>len</span>: <span class='ident'>u64</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u64</span><span class='op'>>></span> { + <span class='kw'>let</span> <span class='ident'>ref_size</span> <span class='op'>=</span> <span class='self'>self</span>.<span class='ident'>ref_size</span>; + <span class='self'>self</span>.<span class='ident'>read_ints</span>(<span class='ident'>len</span>, <span class='ident'>ref_size</span>) + } + + <span class='kw'>fn</span> <span class='ident'>read_object_len</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>len</span>: <span class='ident'>u8</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>u64</span><span class='op'>></span> { + <span class='kw'>if</span> (<span class='ident'>len</span> <span class='kw-2'>&</span> <span class='number'>0x0f</span>) <span class='op'>==</span> <span class='number'>0x0f</span> { + <span class='kw'>let</span> <span class='ident'>len_power_of_two</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>reader</span>.<span class='ident'>read_u8</span>()) <span class='kw-2'>&</span> <span class='number'>0x03</span>; + <span class='prelude-val'>Ok</span>(<span class='kw'>match</span> <span class='ident'>len_power_of_two</span> { + <span class='number'>0</span> <span class='op'>=></span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>reader</span>.<span class='ident'>read_u8</span>()) <span class='kw'>as</span> <span class='ident'>u64</span>, + <span class='number'>1</span> <span class='op'>=></span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>reader</span>.<span class='ident'>read_u16</span>::<span class='op'><</span><span class='ident'>BigEndian</span><span class='op'>></span>()) <span class='kw'>as</span> <span class='ident'>u64</span>, + <span class='number'>2</span> <span class='op'>=></span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>reader</span>.<span class='ident'>read_u32</span>::<span class='op'><</span><span class='ident'>BigEndian</span><span class='op'>></span>()) <span class='kw'>as</span> <span class='ident'>u64</span>, + <span class='number'>3</span> <span class='op'>=></span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>reader</span>.<span class='ident'>read_u64</span>::<span class='op'><</span><span class='ident'>BigEndian</span><span class='op'>></span>()), + _ <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>InvalidData</span>), + }) + } <span class='kw'>else</span> { + <span class='prelude-val'>Ok</span>(<span class='ident'>len</span> <span class='kw'>as</span> <span class='ident'>u64</span>) + } + } + + <span class='kw'>fn</span> <span class='ident'>read_data</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>len</span>: <span class='ident'>u64</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>>></span> { + <span class='kw'>let</span> <span class='ident'>len</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>u64_to_usize</span>(<span class='ident'>len</span>)); + <span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>data</span> <span class='op'>=</span> <span class='macro'>vec</span><span class='macro'>!</span>[<span class='number'>0</span>; <span class='ident'>len</span>]; + <span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>total_read</span> <span class='op'>=</span> <span class='number'>0</span>; + + <span class='kw'>while</span> <span class='ident'>total_read</span> <span class='op'><</span> <span class='ident'>len</span> { + <span class='kw'>let</span> <span class='ident'>read</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>reader</span>.<span class='ident'>read</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='ident'>data</span>[<span class='ident'>total_read</span>..])); + <span class='kw'>if</span> <span class='ident'>read</span> <span class='op'>==</span> <span class='number'>0</span> { + <span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>UnexpectedEof</span>); + } + <span class='ident'>total_read</span> <span class='op'>+=</span> <span class='ident'>read</span>; + } + + <span class='prelude-val'>Ok</span>(<span class='ident'>data</span>) + } + + <span class='kw'>fn</span> <span class='ident'>seek_to_object</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>object_ref</span>: <span class='ident'>u64</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>u64</span><span class='op'>></span> { + <span class='kw'>let</span> <span class='ident'>object_ref</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>u64_to_usize</span>(<span class='ident'>object_ref</span>)); + <span class='kw'>let</span> <span class='ident'>offset</span> <span class='op'>=</span> <span class='op'>*</span><span class='kw-2'>&</span><span class='self'>self</span>.<span class='ident'>object_offsets</span>[<span class='ident'>object_ref</span>]; + <span class='kw'>let</span> <span class='ident'>pos</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>reader</span>.<span class='ident'>seek</span>(<span class='ident'>SeekFrom</span>::<span class='ident'>Start</span>(<span class='ident'>offset</span>))); + <span class='prelude-val'>Ok</span>(<span class='ident'>pos</span>) + } + + <span class='kw'>fn</span> <span class='ident'>read_next</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>PlistEvent</span><span class='op'>>></span> { + <span class='kw'>if</span> <span class='self'>self</span>.<span class='ident'>ref_size</span> <span class='op'>==</span> <span class='number'>0</span> { + <span class='comment'>// Initialise here rather than in new</span> + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>read_trailer</span>()); + } + + <span class='kw'>let</span> <span class='ident'>object_ref</span> <span class='op'>=</span> <span class='kw'>match</span> <span class='self'>self</span>.<span class='ident'>stack</span>.<span class='ident'>last_mut</span>() { + <span class='prelude-val'>Some</span>(<span class='ident'>stack_item</span>) <span class='op'>=></span> <span class='ident'>stack_item</span>.<span class='ident'>object_refs</span>.<span class='ident'>pop</span>(), + <span class='comment'>// Reached the end of the plist</span> + <span class='prelude-val'>None</span> <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Ok</span>(<span class='prelude-val'>None</span>), + }; + + <span class='kw'>match</span> <span class='ident'>object_ref</span> { + <span class='prelude-val'>Some</span>(<span class='ident'>object_ref</span>) <span class='op'>=></span> { + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>seek_to_object</span>(<span class='ident'>object_ref</span>)); + } + <span class='prelude-val'>None</span> <span class='op'>=></span> { + <span class='comment'>// We're at the end of an array or dict. Pop the top stack item and return</span> + <span class='kw'>let</span> <span class='ident'>item</span> <span class='op'>=</span> <span class='self'>self</span>.<span class='ident'>stack</span>.<span class='ident'>pop</span>().<span class='ident'>unwrap</span>(); + <span class='kw'>match</span> <span class='ident'>item</span>.<span class='ident'>ty</span> { + <span class='ident'>StackType</span>::<span class='ident'>Array</span> <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Ok</span>(<span class='prelude-val'>Some</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>EndArray</span>)), + <span class='ident'>StackType</span>::<span class='ident'>Dict</span> <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Ok</span>(<span class='prelude-val'>Some</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>EndDictionary</span>)), + <span class='comment'>// We're at the end of the plist</span> + <span class='ident'>StackType</span>::<span class='ident'>Root</span> <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Ok</span>(<span class='prelude-val'>None</span>), + } + } + } + + <span class='kw'>let</span> <span class='ident'>token</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>reader</span>.<span class='ident'>read_u8</span>()); + <span class='kw'>let</span> <span class='ident'>ty</span> <span class='op'>=</span> (<span class='ident'>token</span> <span class='kw-2'>&</span> <span class='number'>0xf0</span>) <span class='op'>>></span> <span class='number'>4</span>; + <span class='kw'>let</span> <span class='ident'>size</span> <span class='op'>=</span> <span class='ident'>token</span> <span class='kw-2'>&</span> <span class='number'>0x0f</span>; + + <span class='kw'>let</span> <span class='ident'>result</span> <span class='op'>=</span> <span class='kw'>match</span> (<span class='ident'>ty</span>, <span class='ident'>size</span>) { + (<span class='number'>0x0</span>, <span class='number'>0x00</span>) <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>InvalidData</span>), <span class='comment'>// null</span> + (<span class='number'>0x0</span>, <span class='number'>0x08</span>) <span class='op'>=></span> <span class='prelude-val'>Some</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>BooleanValue</span>(<span class='bool-val'>false</span>)), + (<span class='number'>0x0</span>, <span class='number'>0x09</span>) <span class='op'>=></span> <span class='prelude-val'>Some</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>BooleanValue</span>(<span class='bool-val'>true</span>)), + (<span class='number'>0x0</span>, <span class='number'>0x0f</span>) <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>InvalidData</span>), <span class='comment'>// fill</span> + (<span class='number'>0x1</span>, <span class='number'>0</span>) <span class='op'>=></span> <span class='prelude-val'>Some</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>IntegerValue</span>(<span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>reader</span>.<span class='ident'>read_u8</span>()) <span class='kw'>as</span> <span class='ident'>i64</span>)), + (<span class='number'>0x1</span>, <span class='number'>1</span>) <span class='op'>=></span> { + <span class='prelude-val'>Some</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>IntegerValue</span>(<span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>reader</span>.<span class='ident'>read_u16</span>::<span class='op'><</span><span class='ident'>BigEndian</span><span class='op'>></span>()) <span class='kw'>as</span> <span class='ident'>i64</span>)) + } + (<span class='number'>0x1</span>, <span class='number'>2</span>) <span class='op'>=></span> { + <span class='prelude-val'>Some</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>IntegerValue</span>(<span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>reader</span>.<span class='ident'>read_u32</span>::<span class='op'><</span><span class='ident'>BigEndian</span><span class='op'>></span>()) <span class='kw'>as</span> <span class='ident'>i64</span>)) + } + (<span class='number'>0x1</span>, <span class='number'>3</span>) <span class='op'>=></span> <span class='prelude-val'>Some</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>IntegerValue</span>(<span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>reader</span>.<span class='ident'>read_i64</span>::<span class='op'><</span><span class='ident'>BigEndian</span><span class='op'>></span>()))), + (<span class='number'>0x1</span>, <span class='number'>4</span>) <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>InvalidData</span>), <span class='comment'>// 128 bit int</span> + (<span class='number'>0x1</span>, _) <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>InvalidData</span>), <span class='comment'>// variable length int</span> + (<span class='number'>0x2</span>, <span class='number'>2</span>) <span class='op'>=></span> { + <span class='prelude-val'>Some</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>RealValue</span>(<span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>reader</span>.<span class='ident'>read_f32</span>::<span class='op'><</span><span class='ident'>BigEndian</span><span class='op'>></span>()) <span class='kw'>as</span> <span class='ident'>f64</span>)) + } + (<span class='number'>0x2</span>, <span class='number'>3</span>) <span class='op'>=></span> <span class='prelude-val'>Some</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>RealValue</span>(<span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>reader</span>.<span class='ident'>read_f64</span>::<span class='op'><</span><span class='ident'>BigEndian</span><span class='op'>></span>()))), + (<span class='number'>0x2</span>, _) <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>InvalidData</span>), <span class='comment'>// odd length float</span> + (<span class='number'>0x3</span>, <span class='number'>3</span>) <span class='op'>=></span> { + <span class='comment'>// Date</span> + <span class='comment'>// Seconds since 1/1/2001 00:00:00</span> + <span class='kw'>let</span> <span class='ident'>timestamp</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>reader</span>.<span class='ident'>read_f64</span>::<span class='op'><</span><span class='ident'>BigEndian</span><span class='op'>></span>()); + + <span class='kw'>let</span> <span class='ident'>secs</span> <span class='op'>=</span> <span class='ident'>timestamp</span>.<span class='ident'>floor</span>(); + <span class='kw'>let</span> <span class='ident'>subsecs</span> <span class='op'>=</span> <span class='ident'>timestamp</span> <span class='op'>-</span> <span class='ident'>secs</span>; + + <span class='kw'>let</span> <span class='ident'>int_secs</span> <span class='op'>=</span> (<span class='ident'>secs</span> <span class='kw'>as</span> <span class='ident'>i64</span>) <span class='op'>+</span> (<span class='number'>31</span> <span class='op'>*</span> <span class='number'>365</span> <span class='op'>+</span> <span class='number'>8</span>) <span class='op'>*</span> <span class='number'>86400</span>; + <span class='kw'>let</span> <span class='ident'>int_nanos</span> <span class='op'>=</span> (<span class='ident'>subsecs</span> <span class='op'>*</span> <span class='number'>1_000_000_000f64</span>) <span class='kw'>as</span> <span class='ident'>u32</span>; + + <span class='prelude-val'>Some</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>DateValue</span>(<span class='ident'>UTC</span>.<span class='ident'>timestamp</span>(<span class='ident'>int_secs</span>, <span class='ident'>int_nanos</span>))) + } + (<span class='number'>0x4</span>, <span class='ident'>n</span>) <span class='op'>=></span> { + <span class='comment'>// Data</span> + <span class='kw'>let</span> <span class='ident'>len</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>read_object_len</span>(<span class='ident'>n</span>)); + <span class='prelude-val'>Some</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>DataValue</span>(<span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>read_data</span>(<span class='ident'>len</span>)))) + } + (<span class='number'>0x5</span>, <span class='ident'>n</span>) <span class='op'>=></span> { + <span class='comment'>// ASCII string</span> + <span class='kw'>let</span> <span class='ident'>len</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>read_object_len</span>(<span class='ident'>n</span>)); + <span class='kw'>let</span> <span class='ident'>raw</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>read_data</span>(<span class='ident'>len</span>)); + <span class='kw'>let</span> <span class='ident'>string</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>String</span>::<span class='ident'>from_utf8</span>(<span class='ident'>raw</span>)); + <span class='prelude-val'>Some</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>StringValue</span>(<span class='ident'>string</span>)) + } + (<span class='number'>0x6</span>, <span class='ident'>n</span>) <span class='op'>=></span> { + <span class='comment'>// UTF-16 string</span> + <span class='comment'>// n is the length of 16 bit code units</span> + <span class='comment'>// len is the number of bytes</span> + <span class='kw'>let</span> <span class='ident'>len</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>read_object_len</span>(<span class='ident'>n</span>)) <span class='op'>*</span> <span class='number'>2</span>; + <span class='kw'>let</span> <span class='ident'>raw</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>read_data</span>(<span class='ident'>len</span>)); + <span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>cursor</span> <span class='op'>=</span> <span class='ident'>Cursor</span>::<span class='ident'>new</span>(<span class='ident'>raw</span>); + + <span class='kw'>let</span> <span class='ident'>len_div_2</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>u64_to_usize</span>(<span class='ident'>len</span> <span class='op'>/</span> <span class='number'>2</span>)); + <span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>raw_utf16</span> <span class='op'>=</span> <span class='ident'>Vec</span>::<span class='ident'>with_capacity</span>(<span class='ident'>len_div_2</span>); + <span class='kw'>while</span> <span class='ident'>cursor</span>.<span class='ident'>position</span>() <span class='op'><</span> <span class='ident'>len</span> { + <span class='ident'>raw_utf16</span>.<span class='ident'>push</span>(<span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>cursor</span>.<span class='ident'>read_u16</span>::<span class='op'><</span><span class='ident'>BigEndian</span><span class='op'>></span>())) + } + + <span class='kw'>let</span> <span class='ident'>string</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>String</span>::<span class='ident'>from_utf16</span>(<span class='kw-2'>&</span><span class='ident'>raw_utf16</span>)); + <span class='prelude-val'>Some</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>StringValue</span>(<span class='ident'>string</span>)) + } + (<span class='number'>0xa</span>, <span class='ident'>n</span>) <span class='op'>=></span> { + <span class='comment'>// Array</span> + <span class='kw'>let</span> <span class='ident'>len</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>read_object_len</span>(<span class='ident'>n</span>)); + <span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>object_refs</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>read_refs</span>(<span class='ident'>len</span>)); + <span class='comment'>// Reverse so we can pop off the end of the stack in order</span> + <span class='ident'>object_refs</span>.<span class='ident'>reverse</span>(); + + <span class='self'>self</span>.<span class='ident'>stack</span>.<span class='ident'>push</span>(<span class='ident'>StackItem</span> { + <span class='ident'>ty</span>: <span class='ident'>StackType</span>::<span class='ident'>Array</span>, + <span class='ident'>object_refs</span>: <span class='ident'>object_refs</span>, + }); + + <span class='prelude-val'>Some</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>StartArray</span>(<span class='prelude-val'>Some</span>(<span class='ident'>len</span>))) + } + (<span class='number'>0xd</span>, <span class='ident'>n</span>) <span class='op'>=></span> { + <span class='comment'>// Dict</span> + <span class='kw'>let</span> <span class='ident'>len</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>read_object_len</span>(<span class='ident'>n</span>)); + <span class='kw'>let</span> <span class='ident'>key_refs</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>read_refs</span>(<span class='ident'>len</span>)); + <span class='kw'>let</span> <span class='ident'>value_refs</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>read_refs</span>(<span class='ident'>len</span>)); + + <span class='kw'>let</span> <span class='ident'>len_mul_2</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>u64_to_usize</span>(<span class='ident'>len</span> <span class='op'>*</span> <span class='number'>2</span>)); + <span class='kw'>let</span> <span class='ident'>len</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>u64_to_usize</span>(<span class='ident'>len</span>)); + + <span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>object_refs</span> <span class='op'>=</span> <span class='ident'>Vec</span>::<span class='ident'>with_capacity</span>(<span class='ident'>len_mul_2</span>); + + <span class='kw'>for</span> <span class='ident'>i</span> <span class='kw'>in</span> <span class='number'>1</span>..<span class='ident'>len</span> <span class='op'>+</span> <span class='number'>1</span> { + <span class='comment'>// Reverse so we can pop off the end of the stack in order</span> + <span class='ident'>object_refs</span>.<span class='ident'>push</span>(<span class='ident'>value_refs</span>[<span class='ident'>len</span> <span class='op'>-</span> <span class='ident'>i</span>]); + <span class='ident'>object_refs</span>.<span class='ident'>push</span>(<span class='ident'>key_refs</span>[<span class='ident'>len</span> <span class='op'>-</span> <span class='ident'>i</span>]); + } + + <span class='self'>self</span>.<span class='ident'>stack</span>.<span class='ident'>push</span>(<span class='ident'>StackItem</span> { + <span class='ident'>ty</span>: <span class='ident'>StackType</span>::<span class='ident'>Dict</span>, + <span class='ident'>object_refs</span>: <span class='ident'>object_refs</span>, + }); + + <span class='prelude-val'>Some</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>StartDictionary</span>(<span class='prelude-val'>Some</span>(<span class='ident'>len</span> <span class='kw'>as</span> <span class='ident'>u64</span>))) + } + (_, _) <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>InvalidData</span>), + }; + + <span class='prelude-val'>Ok</span>(<span class='ident'>result</span>) + } +} + +<span class='kw'>impl</span><span class='op'><</span><span class='ident'>R</span>: <span class='ident'>Read</span> <span class='op'>+</span> <span class='ident'>Seek</span><span class='op'>></span> <span class='ident'>Iterator</span> <span class='kw'>for</span> <span class='ident'>EventReader</span><span class='op'><</span><span class='ident'>R</span><span class='op'>></span> { + <span class='kw'>type</span> <span class='ident'>Item</span> <span class='op'>=</span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>PlistEvent</span><span class='op'>></span>; + + <span class='kw'>fn</span> <span class='ident'>next</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Option</span><span class='op'><</span><span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>PlistEvent</span><span class='op'>>></span> { + <span class='kw'>if</span> <span class='self'>self</span>.<span class='ident'>finished</span> { + <span class='prelude-val'>None</span> + } <span class='kw'>else</span> { + <span class='kw'>match</span> <span class='self'>self</span>.<span class='ident'>read_next</span>() { + <span class='prelude-val'>Ok</span>(<span class='prelude-val'>Some</span>(<span class='ident'>event</span>)) <span class='op'>=></span> <span class='prelude-val'>Some</span>(<span class='prelude-val'>Ok</span>(<span class='ident'>event</span>)), + <span class='prelude-val'>Err</span>(<span class='ident'>err</span>) <span class='op'>=></span> { + <span class='self'>self</span>.<span class='ident'>finished</span> <span class='op'>=</span> <span class='bool-val'>true</span>; + <span class='prelude-val'>Some</span>(<span class='prelude-val'>Err</span>(<span class='ident'>err</span>)) + } + <span class='prelude-val'>Ok</span>(<span class='prelude-val'>None</span>) <span class='op'>=></span> { + <span class='self'>self</span>.<span class='ident'>finished</span> <span class='op'>=</span> <span class='bool-val'>true</span>; + <span class='prelude-val'>None</span> + } + } + } + } +} + +<span class='attribute'>#[<span class='ident'>cfg</span>(<span class='ident'>test</span>)]</span> +<span class='kw'>mod</span> <span class='ident'>tests</span> { + <span class='kw'>use</span> <span class='ident'>chrono</span>::{<span class='ident'>TimeZone</span>, <span class='ident'>UTC</span>}; + <span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>fs</span>::<span class='ident'>File</span>; + <span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>path</span>::<span class='ident'>Path</span>; + + <span class='kw'>use</span> <span class='kw'>super</span>::<span class='op'>*</span>; + <span class='kw'>use</span> <span class='ident'>PlistEvent</span>; + + <span class='attribute'>#[<span class='ident'>test</span>]</span> + <span class='kw'>fn</span> <span class='ident'>streaming_parser</span>() { + <span class='kw'>use</span> <span class='ident'>PlistEvent</span>::<span class='op'>*</span>; + + <span class='kw'>let</span> <span class='ident'>reader</span> <span class='op'>=</span> <span class='ident'>File</span>::<span class='ident'>open</span>(<span class='kw-2'>&</span><span class='ident'>Path</span>::<span class='ident'>new</span>(<span class='string'>"./tests/data/binary.plist"</span>)).<span class='ident'>unwrap</span>(); + <span class='kw'>let</span> <span class='ident'>streaming_parser</span> <span class='op'>=</span> <span class='ident'>EventReader</span>::<span class='ident'>new</span>(<span class='ident'>reader</span>); + <span class='kw'>let</span> <span class='ident'>events</span>: <span class='ident'>Vec</span><span class='op'><</span><span class='ident'>PlistEvent</span><span class='op'>></span> <span class='op'>=</span> <span class='ident'>streaming_parser</span>.<span class='ident'>map</span>(<span class='op'>|</span><span class='ident'>e</span><span class='op'>|</span> <span class='ident'>e</span>.<span class='ident'>unwrap</span>()).<span class='ident'>collect</span>(); + + <span class='kw'>let</span> <span class='ident'>comparison</span> <span class='op'>=</span> <span class='kw-2'>&</span>[<span class='ident'>StartDictionary</span>(<span class='prelude-val'>Some</span>(<span class='number'>6</span>)), + <span class='ident'>StringValue</span>(<span class='string'>"Lines"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>StartArray</span>(<span class='prelude-val'>Some</span>(<span class='number'>2</span>)), + <span class='ident'>StringValue</span>(<span class='string'>"It is a tale told by an idiot,"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>StringValue</span>(<span class='string'>"Full of sound and fury, signifying nothing."</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>EndArray</span>, + <span class='ident'>StringValue</span>(<span class='string'>"Death"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>IntegerValue</span>(<span class='number'>1564</span>), + <span class='ident'>StringValue</span>(<span class='string'>"Height"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>RealValue</span>(<span class='number'>1.60</span>), + <span class='ident'>StringValue</span>(<span class='string'>"Birthdate"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>DateValue</span>(<span class='ident'>UTC</span>.<span class='ident'>ymd</span>(<span class='number'>1981</span>, <span class='number'>05</span>, <span class='number'>16</span>).<span class='ident'>and_hms</span>(<span class='number'>11</span>, <span class='number'>32</span>, <span class='number'>06</span>)), + <span class='ident'>StringValue</span>(<span class='string'>"Author"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>StringValue</span>(<span class='string'>"William Shakespeare"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>StringValue</span>(<span class='string'>"Data"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>DataValue</span>(<span class='macro'>vec</span><span class='macro'>!</span>[<span class='number'>0</span>, <span class='number'>0</span>, <span class='number'>0</span>, <span class='number'>190</span>, <span class='number'>0</span>, <span class='number'>0</span>, <span class='number'>0</span>, <span class='number'>3</span>, <span class='number'>0</span>, <span class='number'>0</span>, <span class='number'>0</span>, <span class='number'>30</span>, <span class='number'>0</span>, <span class='number'>0</span>, <span class='number'>0</span>]), + <span class='ident'>EndDictionary</span>]; + + <span class='macro'>assert_eq</span><span class='macro'>!</span>(<span class='ident'>events</span>, <span class='ident'>comparison</span>); + } + + <span class='attribute'>#[<span class='ident'>test</span>]</span> + <span class='kw'>fn</span> <span class='ident'>utf16_plist</span>() { + <span class='kw'>use</span> <span class='ident'>PlistEvent</span>::<span class='op'>*</span>; + + <span class='kw'>let</span> <span class='ident'>reader</span> <span class='op'>=</span> <span class='ident'>File</span>::<span class='ident'>open</span>(<span class='kw-2'>&</span><span class='ident'>Path</span>::<span class='ident'>new</span>(<span class='string'>"./tests/data/utf16_bplist.plist"</span>)).<span class='ident'>unwrap</span>(); + <span class='kw'>let</span> <span class='ident'>streaming_parser</span> <span class='op'>=</span> <span class='ident'>EventReader</span>::<span class='ident'>new</span>(<span class='ident'>reader</span>); + <span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>events</span>: <span class='ident'>Vec</span><span class='op'><</span><span class='ident'>PlistEvent</span><span class='op'>></span> <span class='op'>=</span> <span class='ident'>streaming_parser</span>.<span class='ident'>map</span>(<span class='op'>|</span><span class='ident'>e</span><span class='op'>|</span> <span class='ident'>e</span>.<span class='ident'>unwrap</span>()).<span class='ident'>collect</span>(); + + <span class='macro'>assert_eq</span><span class='macro'>!</span>(<span class='ident'>events</span>[<span class='number'>2</span>], <span class='ident'>StringValue</span>(<span class='string'>"\u{2605} or better"</span>.<span class='ident'>to_owned</span>())); + + <span class='kw'>let</span> <span class='ident'>poem</span> <span class='op'>=</span> <span class='kw'>if</span> <span class='kw'>let</span> <span class='ident'>StringValue</span>(<span class='kw-2'>ref</span> <span class='kw-2'>mut</span> <span class='ident'>poem</span>) <span class='op'>=</span> <span class='ident'>events</span>[<span class='number'>4</span>] { <span class='ident'>poem</span> } <span class='kw'>else</span> { <span class='macro'>panic</span><span class='macro'>!</span>(<span class='string'>"not a string"</span>) }; + <span class='macro'>assert_eq</span><span class='macro'>!</span>(<span class='ident'>poem</span>.<span class='ident'>len</span>(), <span class='number'>643</span>); + <span class='macro'>assert_eq</span><span class='macro'>!</span>(<span class='ident'>poem</span>.<span class='ident'>pop</span>().<span class='ident'>unwrap</span>(), <span class='string'>'\u{2605}'</span>); + } +} +</pre> +</section> + <section id='search' class="content hidden"></section> + + <section class="footer"></section> + + <aside id="help" class="hidden"> + <div> + <h1 class="hidden">Help</h1> + + <div class="shortcuts"> + <h2>Keyboard Shortcuts</h2> + + <dl> + <dt>?</dt> + <dd>Show this help dialog</dd> + <dt>S</dt> + <dd>Focus the search field</dd> + <dt>⇤</dt> + <dd>Move up in search results</dd> + <dt>⇥</dt> + <dd>Move down in search results</dd> + <dt>⏎</dt> + <dd>Go to active search result</dd> + <dt>+</dt> + <dd>Collapse/expand all sections</dd> + </dl> + </div> + + <div class="infos"> + <h2>Search Tricks</h2> + + <p> + Prefix searches with a type followed by a colon (e.g. + <code>fn:</code>) to restrict the search to a given type. + </p> + + <p> + Accepted types are: <code>fn</code>, <code>mod</code>, + <code>struct</code>, <code>enum</code>, + <code>trait</code>, <code>type</code>, <code>macro</code>, + and <code>const</code>. + </p> + + <p> + Search functions by type signature (e.g. + <code>vec -> usize</code> or <code>* -> vec</code>) + </p> + </div> + </div> + </aside> + + + + <script> + window.rootPath = "../../../../"; + window.currentCrate = "plist"; + </script> + <script src="../../../../jquery.js"></script> + <script src="../../../../main.js"></script> + <script defer src="../../../../search-index.js"></script> +</body> +</html>
\ No newline at end of file diff --git a/src/plist/src/builder.rs.html b/src/plist/src/builder.rs.html new file mode 100644 index 0000000..78ab47d --- /dev/null +++ b/src/plist/src/builder.rs.html @@ -0,0 +1,396 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="generator" content="rustdoc"> + <meta name="description" content="Source to the Rust file `src/builder.rs`."> + <meta name="keywords" content="rust, rustlang, rust-lang"> + + <title>builder.rs.html -- source</title> + + <link rel="stylesheet" type="text/css" href="../../../rustdoc.css"> + <link rel="stylesheet" type="text/css" href="../../../main.css"> + + + + +</head> +<body class="rustdoc"> + <!--[if lte IE 8]> + <div class="warning"> + This old browser is unsupported and will most likely display funky + things. + </div> + <![endif]--> + + + + <nav class="sidebar"> + + + </nav> + + <nav class="sub"> + <form class="search-form js-only"> + <div class="search-container"> + <input class="search-input" name="search" + autocomplete="off" + placeholder="Click or press ‘S’ to search, ‘?’ for more options…" + type="search"> + </div> + </form> + </nav> + + <section id='main' class="content source"><pre class="line-numbers"><span id="1"> 1</span> +<span id="2"> 2</span> +<span id="3"> 3</span> +<span id="4"> 4</span> +<span id="5"> 5</span> +<span id="6"> 6</span> +<span id="7"> 7</span> +<span id="8"> 8</span> +<span id="9"> 9</span> +<span id="10"> 10</span> +<span id="11"> 11</span> +<span id="12"> 12</span> +<span id="13"> 13</span> +<span id="14"> 14</span> +<span id="15"> 15</span> +<span id="16"> 16</span> +<span id="17"> 17</span> +<span id="18"> 18</span> +<span id="19"> 19</span> +<span id="20"> 20</span> +<span id="21"> 21</span> +<span id="22"> 22</span> +<span id="23"> 23</span> +<span id="24"> 24</span> +<span id="25"> 25</span> +<span id="26"> 26</span> +<span id="27"> 27</span> +<span id="28"> 28</span> +<span id="29"> 29</span> +<span id="30"> 30</span> +<span id="31"> 31</span> +<span id="32"> 32</span> +<span id="33"> 33</span> +<span id="34"> 34</span> +<span id="35"> 35</span> +<span id="36"> 36</span> +<span id="37"> 37</span> +<span id="38"> 38</span> +<span id="39"> 39</span> +<span id="40"> 40</span> +<span id="41"> 41</span> +<span id="42"> 42</span> +<span id="43"> 43</span> +<span id="44"> 44</span> +<span id="45"> 45</span> +<span id="46"> 46</span> +<span id="47"> 47</span> +<span id="48"> 48</span> +<span id="49"> 49</span> +<span id="50"> 50</span> +<span id="51"> 51</span> +<span id="52"> 52</span> +<span id="53"> 53</span> +<span id="54"> 54</span> +<span id="55"> 55</span> +<span id="56"> 56</span> +<span id="57"> 57</span> +<span id="58"> 58</span> +<span id="59"> 59</span> +<span id="60"> 60</span> +<span id="61"> 61</span> +<span id="62"> 62</span> +<span id="63"> 63</span> +<span id="64"> 64</span> +<span id="65"> 65</span> +<span id="66"> 66</span> +<span id="67"> 67</span> +<span id="68"> 68</span> +<span id="69"> 69</span> +<span id="70"> 70</span> +<span id="71"> 71</span> +<span id="72"> 72</span> +<span id="73"> 73</span> +<span id="74"> 74</span> +<span id="75"> 75</span> +<span id="76"> 76</span> +<span id="77"> 77</span> +<span id="78"> 78</span> +<span id="79"> 79</span> +<span id="80"> 80</span> +<span id="81"> 81</span> +<span id="82"> 82</span> +<span id="83"> 83</span> +<span id="84"> 84</span> +<span id="85"> 85</span> +<span id="86"> 86</span> +<span id="87"> 87</span> +<span id="88"> 88</span> +<span id="89"> 89</span> +<span id="90"> 90</span> +<span id="91"> 91</span> +<span id="92"> 92</span> +<span id="93"> 93</span> +<span id="94"> 94</span> +<span id="95"> 95</span> +<span id="96"> 96</span> +<span id="97"> 97</span> +<span id="98"> 98</span> +<span id="99"> 99</span> +<span id="100">100</span> +<span id="101">101</span> +<span id="102">102</span> +<span id="103">103</span> +<span id="104">104</span> +<span id="105">105</span> +<span id="106">106</span> +<span id="107">107</span> +<span id="108">108</span> +<span id="109">109</span> +<span id="110">110</span> +<span id="111">111</span> +<span id="112">112</span> +<span id="113">113</span> +<span id="114">114</span> +<span id="115">115</span> +<span id="116">116</span> +<span id="117">117</span> +<span id="118">118</span> +<span id="119">119</span> +<span id="120">120</span> +<span id="121">121</span> +<span id="122">122</span> +<span id="123">123</span> +<span id="124">124</span> +<span id="125">125</span> +<span id="126">126</span> +<span id="127">127</span> +<span id="128">128</span> +<span id="129">129</span> +<span id="130">130</span> +<span id="131">131</span> +<span id="132">132</span> +<span id="133">133</span> +<span id="134">134</span> +<span id="135">135</span> +<span id="136">136</span> +<span id="137">137</span> +<span id="138">138</span> +<span id="139">139</span> +<span id="140">140</span> +<span id="141">141</span> +<span id="142">142</span> +<span id="143">143</span> +<span id="144">144</span> +</pre><pre class='rust '> +<span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>collections</span>::<span class='ident'>BTreeMap</span>; + +<span class='kw'>use</span> {<span class='ident'>Error</span>, <span class='prelude-ty'>Result</span>, <span class='ident'>Plist</span>, <span class='ident'>PlistEvent</span>, <span class='ident'>u64_option_to_usize</span>}; + +<span class='kw'>pub</span> <span class='kw'>struct</span> <span class='ident'>Builder</span><span class='op'><</span><span class='ident'>T</span><span class='op'>></span> { + <span class='ident'>stream</span>: <span class='ident'>T</span>, + <span class='ident'>token</span>: <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>PlistEvent</span><span class='op'>></span>, +} + +<span class='kw'>impl</span><span class='op'><</span><span class='ident'>T</span>: <span class='ident'>Iterator</span><span class='op'><</span><span class='ident'>Item</span> <span class='op'>=</span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>PlistEvent</span><span class='op'>>></span><span class='op'>></span> <span class='ident'>Builder</span><span class='op'><</span><span class='ident'>T</span><span class='op'>></span> { + <span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>new</span>(<span class='ident'>stream</span>: <span class='ident'>T</span>) <span class='op'>-></span> <span class='ident'>Builder</span><span class='op'><</span><span class='ident'>T</span><span class='op'>></span> { + <span class='ident'>Builder</span> { + <span class='ident'>stream</span>: <span class='ident'>stream</span>, + <span class='ident'>token</span>: <span class='prelude-val'>None</span>, + } + } + + <span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>build</span>(<span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>Plist</span><span class='op'>></span> { + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>bump</span>()); + + <span class='kw'>let</span> <span class='ident'>plist</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>build_value</span>()); + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>bump</span>()); + <span class='kw'>match</span> <span class='self'>self</span>.<span class='ident'>token</span> { + <span class='prelude-val'>None</span> <span class='op'>=></span> (), + <span class='comment'>// The stream should have finished</span> + _ <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>InvalidData</span>), + }; + <span class='prelude-val'>Ok</span>(<span class='ident'>plist</span>) + } + + <span class='kw'>fn</span> <span class='ident'>bump</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>()<span class='op'>></span> { + <span class='self'>self</span>.<span class='ident'>token</span> <span class='op'>=</span> <span class='kw'>match</span> <span class='self'>self</span>.<span class='ident'>stream</span>.<span class='ident'>next</span>() { + <span class='prelude-val'>Some</span>(<span class='prelude-val'>Ok</span>(<span class='ident'>token</span>)) <span class='op'>=></span> <span class='prelude-val'>Some</span>(<span class='ident'>token</span>), + <span class='prelude-val'>Some</span>(<span class='prelude-val'>Err</span>(<span class='ident'>err</span>)) <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>err</span>), + <span class='prelude-val'>None</span> <span class='op'>=></span> <span class='prelude-val'>None</span>, + }; + <span class='prelude-val'>Ok</span>(()) + } + + <span class='kw'>fn</span> <span class='ident'>build_value</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>Plist</span><span class='op'>></span> { + <span class='kw'>match</span> <span class='self'>self</span>.<span class='ident'>token</span>.<span class='ident'>take</span>() { + <span class='prelude-val'>Some</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>StartArray</span>(<span class='ident'>len</span>)) <span class='op'>=></span> <span class='prelude-val'>Ok</span>(<span class='ident'>Plist</span>::<span class='ident'>Array</span>(<span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>build_array</span>(<span class='ident'>len</span>)))), + <span class='prelude-val'>Some</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>StartDictionary</span>(<span class='ident'>len</span>)) <span class='op'>=></span> { + <span class='prelude-val'>Ok</span>(<span class='ident'>Plist</span>::<span class='ident'>Dictionary</span>(<span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>build_dict</span>(<span class='ident'>len</span>)))) + } + + <span class='prelude-val'>Some</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>BooleanValue</span>(<span class='ident'>b</span>)) <span class='op'>=></span> <span class='prelude-val'>Ok</span>(<span class='ident'>Plist</span>::<span class='ident'>Boolean</span>(<span class='ident'>b</span>)), + <span class='prelude-val'>Some</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>DataValue</span>(<span class='ident'>d</span>)) <span class='op'>=></span> <span class='prelude-val'>Ok</span>(<span class='ident'>Plist</span>::<span class='ident'>Data</span>(<span class='ident'>d</span>)), + <span class='prelude-val'>Some</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>DateValue</span>(<span class='ident'>d</span>)) <span class='op'>=></span> <span class='prelude-val'>Ok</span>(<span class='ident'>Plist</span>::<span class='ident'>Date</span>(<span class='ident'>d</span>)), + <span class='prelude-val'>Some</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>IntegerValue</span>(<span class='ident'>i</span>)) <span class='op'>=></span> <span class='prelude-val'>Ok</span>(<span class='ident'>Plist</span>::<span class='ident'>Integer</span>(<span class='ident'>i</span>)), + <span class='prelude-val'>Some</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>RealValue</span>(<span class='ident'>f</span>)) <span class='op'>=></span> <span class='prelude-val'>Ok</span>(<span class='ident'>Plist</span>::<span class='ident'>Real</span>(<span class='ident'>f</span>)), + <span class='prelude-val'>Some</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>StringValue</span>(<span class='ident'>s</span>)) <span class='op'>=></span> <span class='prelude-val'>Ok</span>(<span class='ident'>Plist</span>::<span class='ident'>String</span>(<span class='ident'>s</span>)), + + <span class='prelude-val'>Some</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>EndArray</span>) <span class='op'>=></span> <span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>InvalidData</span>), + <span class='prelude-val'>Some</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>EndDictionary</span>) <span class='op'>=></span> <span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>InvalidData</span>), + + <span class='comment'>// The stream should not have ended here</span> + <span class='prelude-val'>None</span> <span class='op'>=></span> <span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>InvalidData</span>), + } + } + + <span class='kw'>fn</span> <span class='ident'>build_array</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>len</span>: <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>u64</span><span class='op'>></span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>Plist</span><span class='op'>>></span> { + <span class='kw'>let</span> <span class='ident'>len</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>u64_option_to_usize</span>(<span class='ident'>len</span>)); + <span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>values</span> <span class='op'>=</span> <span class='kw'>match</span> <span class='ident'>len</span> { + <span class='prelude-val'>Some</span>(<span class='ident'>len</span>) <span class='op'>=></span> <span class='ident'>Vec</span>::<span class='ident'>with_capacity</span>(<span class='ident'>len</span>), + <span class='prelude-val'>None</span> <span class='op'>=></span> <span class='ident'>Vec</span>::<span class='ident'>new</span>(), + }; + + <span class='kw'>loop</span> { + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>bump</span>()); + <span class='kw'>if</span> <span class='kw'>let</span> <span class='prelude-val'>Some</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>EndArray</span>) <span class='op'>=</span> <span class='self'>self</span>.<span class='ident'>token</span> { + <span class='self'>self</span>.<span class='ident'>token</span>.<span class='ident'>take</span>(); + <span class='kw'>return</span> <span class='prelude-val'>Ok</span>(<span class='ident'>values</span>); + } + <span class='ident'>values</span>.<span class='ident'>push</span>(<span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>build_value</span>())); + } + } + + <span class='kw'>fn</span> <span class='ident'>build_dict</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>_len</span>: <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>u64</span><span class='op'>></span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>BTreeMap</span><span class='op'><</span><span class='ident'>String</span>, <span class='ident'>Plist</span><span class='op'>>></span> { + <span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>values</span> <span class='op'>=</span> <span class='ident'>BTreeMap</span>::<span class='ident'>new</span>(); + + <span class='kw'>loop</span> { + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>bump</span>()); + <span class='kw'>match</span> <span class='self'>self</span>.<span class='ident'>token</span>.<span class='ident'>take</span>() { + <span class='prelude-val'>Some</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>EndDictionary</span>) <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Ok</span>(<span class='ident'>values</span>), + <span class='prelude-val'>Some</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>StringValue</span>(<span class='ident'>s</span>)) <span class='op'>=></span> { + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>bump</span>()); + <span class='ident'>values</span>.<span class='ident'>insert</span>(<span class='ident'>s</span>, <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>build_value</span>())); + } + _ <span class='op'>=></span> { + <span class='comment'>// Only string keys are supported in plists</span> + <span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>InvalidData</span>); + } + } + } + } +} + +<span class='attribute'>#[<span class='ident'>cfg</span>(<span class='ident'>test</span>)]</span> +<span class='kw'>mod</span> <span class='ident'>tests</span> { + <span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>collections</span>::<span class='ident'>BTreeMap</span>; + + <span class='kw'>use</span> <span class='kw'>super</span>::<span class='op'>*</span>; + <span class='kw'>use</span> <span class='ident'>Plist</span>; + + <span class='attribute'>#[<span class='ident'>test</span>]</span> + <span class='kw'>fn</span> <span class='ident'>builder</span>() { + <span class='kw'>use</span> <span class='ident'>PlistEvent</span>::<span class='op'>*</span>; + + <span class='comment'>// Input</span> + + <span class='kw'>let</span> <span class='ident'>events</span> <span class='op'>=</span> <span class='macro'>vec</span><span class='macro'>!</span>[<span class='ident'>StartDictionary</span>(<span class='prelude-val'>None</span>), + <span class='ident'>StringValue</span>(<span class='string'>"Author"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>StringValue</span>(<span class='string'>"William Shakespeare"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>StringValue</span>(<span class='string'>"Lines"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>StartArray</span>(<span class='prelude-val'>None</span>), + <span class='ident'>StringValue</span>(<span class='string'>"It is a tale told by an idiot,"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>StringValue</span>(<span class='string'>"Full of sound and fury, signifying nothing."</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>EndArray</span>, + <span class='ident'>StringValue</span>(<span class='string'>"Birthdate"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>IntegerValue</span>(<span class='number'>1564</span>), + <span class='ident'>StringValue</span>(<span class='string'>"Height"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>RealValue</span>(<span class='number'>1.60</span>), + <span class='ident'>EndDictionary</span>]; + + <span class='kw'>let</span> <span class='ident'>builder</span> <span class='op'>=</span> <span class='ident'>Builder</span>::<span class='ident'>new</span>(<span class='ident'>events</span>.<span class='ident'>into_iter</span>().<span class='ident'>map</span>(<span class='op'>|</span><span class='ident'>e</span><span class='op'>|</span> <span class='prelude-val'>Ok</span>(<span class='ident'>e</span>))); + <span class='kw'>let</span> <span class='ident'>plist</span> <span class='op'>=</span> <span class='ident'>builder</span>.<span class='ident'>build</span>(); + + <span class='comment'>// Expected output</span> + + <span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>lines</span> <span class='op'>=</span> <span class='ident'>Vec</span>::<span class='ident'>new</span>(); + <span class='ident'>lines</span>.<span class='ident'>push</span>(<span class='ident'>Plist</span>::<span class='ident'>String</span>(<span class='string'>"It is a tale told by an idiot,"</span>.<span class='ident'>to_owned</span>())); + <span class='ident'>lines</span>.<span class='ident'>push</span>(<span class='ident'>Plist</span>::<span class='ident'>String</span>(<span class='string'>"Full of sound and fury, signifying nothing."</span>.<span class='ident'>to_owned</span>())); + + <span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>dict</span> <span class='op'>=</span> <span class='ident'>BTreeMap</span>::<span class='ident'>new</span>(); + <span class='ident'>dict</span>.<span class='ident'>insert</span>(<span class='string'>"Author"</span>.<span class='ident'>to_owned</span>(), + <span class='ident'>Plist</span>::<span class='ident'>String</span>(<span class='string'>"William Shakespeare"</span>.<span class='ident'>to_owned</span>())); + <span class='ident'>dict</span>.<span class='ident'>insert</span>(<span class='string'>"Lines"</span>.<span class='ident'>to_owned</span>(), <span class='ident'>Plist</span>::<span class='ident'>Array</span>(<span class='ident'>lines</span>)); + <span class='ident'>dict</span>.<span class='ident'>insert</span>(<span class='string'>"Birthdate"</span>.<span class='ident'>to_owned</span>(), <span class='ident'>Plist</span>::<span class='ident'>Integer</span>(<span class='number'>1564</span>)); + <span class='ident'>dict</span>.<span class='ident'>insert</span>(<span class='string'>"Height"</span>.<span class='ident'>to_owned</span>(), <span class='ident'>Plist</span>::<span class='ident'>Real</span>(<span class='number'>1.60</span>)); + + <span class='macro'>assert_eq</span><span class='macro'>!</span>(<span class='ident'>plist</span>.<span class='ident'>unwrap</span>(), <span class='ident'>Plist</span>::<span class='ident'>Dictionary</span>(<span class='ident'>dict</span>)); + } +} +</pre> +</section> + <section id='search' class="content hidden"></section> + + <section class="footer"></section> + + <aside id="help" class="hidden"> + <div> + <h1 class="hidden">Help</h1> + + <div class="shortcuts"> + <h2>Keyboard Shortcuts</h2> + + <dl> + <dt>?</dt> + <dd>Show this help dialog</dd> + <dt>S</dt> + <dd>Focus the search field</dd> + <dt>⇤</dt> + <dd>Move up in search results</dd> + <dt>⇥</dt> + <dd>Move down in search results</dd> + <dt>⏎</dt> + <dd>Go to active search result</dd> + <dt>+</dt> + <dd>Collapse/expand all sections</dd> + </dl> + </div> + + <div class="infos"> + <h2>Search Tricks</h2> + + <p> + Prefix searches with a type followed by a colon (e.g. + <code>fn:</code>) to restrict the search to a given type. + </p> + + <p> + Accepted types are: <code>fn</code>, <code>mod</code>, + <code>struct</code>, <code>enum</code>, + <code>trait</code>, <code>type</code>, <code>macro</code>, + and <code>const</code>. + </p> + + <p> + Search functions by type signature (e.g. + <code>vec -> usize</code> or <code>* -> vec</code>) + </p> + </div> + </div> + </aside> + + + + <script> + window.rootPath = "../../../"; + window.currentCrate = "plist"; + </script> + <script src="../../../jquery.js"></script> + <script src="../../../main.js"></script> + <script defer src="../../../search-index.js"></script> +</body> +</html>
\ No newline at end of file diff --git a/src/plist/src/de.rs.html b/src/plist/src/de.rs.html new file mode 100644 index 0000000..a720da7 --- /dev/null +++ b/src/plist/src/de.rs.html @@ -0,0 +1,660 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="generator" content="rustdoc"> + <meta name="description" content="Source to the Rust file `src/de.rs`."> + <meta name="keywords" content="rust, rustlang, rust-lang"> + + <title>de.rs.html -- source</title> + + <link rel="stylesheet" type="text/css" href="../../../rustdoc.css"> + <link rel="stylesheet" type="text/css" href="../../../main.css"> + + + + +</head> +<body class="rustdoc"> + <!--[if lte IE 8]> + <div class="warning"> + This old browser is unsupported and will most likely display funky + things. + </div> + <![endif]--> + + + + <nav class="sidebar"> + + + </nav> + + <nav class="sub"> + <form class="search-form js-only"> + <div class="search-container"> + <input class="search-input" name="search" + autocomplete="off" + placeholder="Click or press ‘S’ to search, ‘?’ for more options…" + type="search"> + </div> + </form> + </nav> + + <section id='main' class="content source"><pre class="line-numbers"><span id="1"> 1</span> +<span id="2"> 2</span> +<span id="3"> 3</span> +<span id="4"> 4</span> +<span id="5"> 5</span> +<span id="6"> 6</span> +<span id="7"> 7</span> +<span id="8"> 8</span> +<span id="9"> 9</span> +<span id="10"> 10</span> +<span id="11"> 11</span> +<span id="12"> 12</span> +<span id="13"> 13</span> +<span id="14"> 14</span> +<span id="15"> 15</span> +<span id="16"> 16</span> +<span id="17"> 17</span> +<span id="18"> 18</span> +<span id="19"> 19</span> +<span id="20"> 20</span> +<span id="21"> 21</span> +<span id="22"> 22</span> +<span id="23"> 23</span> +<span id="24"> 24</span> +<span id="25"> 25</span> +<span id="26"> 26</span> +<span id="27"> 27</span> +<span id="28"> 28</span> +<span id="29"> 29</span> +<span id="30"> 30</span> +<span id="31"> 31</span> +<span id="32"> 32</span> +<span id="33"> 33</span> +<span id="34"> 34</span> +<span id="35"> 35</span> +<span id="36"> 36</span> +<span id="37"> 37</span> +<span id="38"> 38</span> +<span id="39"> 39</span> +<span id="40"> 40</span> +<span id="41"> 41</span> +<span id="42"> 42</span> +<span id="43"> 43</span> +<span id="44"> 44</span> +<span id="45"> 45</span> +<span id="46"> 46</span> +<span id="47"> 47</span> +<span id="48"> 48</span> +<span id="49"> 49</span> +<span id="50"> 50</span> +<span id="51"> 51</span> +<span id="52"> 52</span> +<span id="53"> 53</span> +<span id="54"> 54</span> +<span id="55"> 55</span> +<span id="56"> 56</span> +<span id="57"> 57</span> +<span id="58"> 58</span> +<span id="59"> 59</span> +<span id="60"> 60</span> +<span id="61"> 61</span> +<span id="62"> 62</span> +<span id="63"> 63</span> +<span id="64"> 64</span> +<span id="65"> 65</span> +<span id="66"> 66</span> +<span id="67"> 67</span> +<span id="68"> 68</span> +<span id="69"> 69</span> +<span id="70"> 70</span> +<span id="71"> 71</span> +<span id="72"> 72</span> +<span id="73"> 73</span> +<span id="74"> 74</span> +<span id="75"> 75</span> +<span id="76"> 76</span> +<span id="77"> 77</span> +<span id="78"> 78</span> +<span id="79"> 79</span> +<span id="80"> 80</span> +<span id="81"> 81</span> +<span id="82"> 82</span> +<span id="83"> 83</span> +<span id="84"> 84</span> +<span id="85"> 85</span> +<span id="86"> 86</span> +<span id="87"> 87</span> +<span id="88"> 88</span> +<span id="89"> 89</span> +<span id="90"> 90</span> +<span id="91"> 91</span> +<span id="92"> 92</span> +<span id="93"> 93</span> +<span id="94"> 94</span> +<span id="95"> 95</span> +<span id="96"> 96</span> +<span id="97"> 97</span> +<span id="98"> 98</span> +<span id="99"> 99</span> +<span id="100">100</span> +<span id="101">101</span> +<span id="102">102</span> +<span id="103">103</span> +<span id="104">104</span> +<span id="105">105</span> +<span id="106">106</span> +<span id="107">107</span> +<span id="108">108</span> +<span id="109">109</span> +<span id="110">110</span> +<span id="111">111</span> +<span id="112">112</span> +<span id="113">113</span> +<span id="114">114</span> +<span id="115">115</span> +<span id="116">116</span> +<span id="117">117</span> +<span id="118">118</span> +<span id="119">119</span> +<span id="120">120</span> +<span id="121">121</span> +<span id="122">122</span> +<span id="123">123</span> +<span id="124">124</span> +<span id="125">125</span> +<span id="126">126</span> +<span id="127">127</span> +<span id="128">128</span> +<span id="129">129</span> +<span id="130">130</span> +<span id="131">131</span> +<span id="132">132</span> +<span id="133">133</span> +<span id="134">134</span> +<span id="135">135</span> +<span id="136">136</span> +<span id="137">137</span> +<span id="138">138</span> +<span id="139">139</span> +<span id="140">140</span> +<span id="141">141</span> +<span id="142">142</span> +<span id="143">143</span> +<span id="144">144</span> +<span id="145">145</span> +<span id="146">146</span> +<span id="147">147</span> +<span id="148">148</span> +<span id="149">149</span> +<span id="150">150</span> +<span id="151">151</span> +<span id="152">152</span> +<span id="153">153</span> +<span id="154">154</span> +<span id="155">155</span> +<span id="156">156</span> +<span id="157">157</span> +<span id="158">158</span> +<span id="159">159</span> +<span id="160">160</span> +<span id="161">161</span> +<span id="162">162</span> +<span id="163">163</span> +<span id="164">164</span> +<span id="165">165</span> +<span id="166">166</span> +<span id="167">167</span> +<span id="168">168</span> +<span id="169">169</span> +<span id="170">170</span> +<span id="171">171</span> +<span id="172">172</span> +<span id="173">173</span> +<span id="174">174</span> +<span id="175">175</span> +<span id="176">176</span> +<span id="177">177</span> +<span id="178">178</span> +<span id="179">179</span> +<span id="180">180</span> +<span id="181">181</span> +<span id="182">182</span> +<span id="183">183</span> +<span id="184">184</span> +<span id="185">185</span> +<span id="186">186</span> +<span id="187">187</span> +<span id="188">188</span> +<span id="189">189</span> +<span id="190">190</span> +<span id="191">191</span> +<span id="192">192</span> +<span id="193">193</span> +<span id="194">194</span> +<span id="195">195</span> +<span id="196">196</span> +<span id="197">197</span> +<span id="198">198</span> +<span id="199">199</span> +<span id="200">200</span> +<span id="201">201</span> +<span id="202">202</span> +<span id="203">203</span> +<span id="204">204</span> +<span id="205">205</span> +<span id="206">206</span> +<span id="207">207</span> +<span id="208">208</span> +<span id="209">209</span> +<span id="210">210</span> +<span id="211">211</span> +<span id="212">212</span> +<span id="213">213</span> +<span id="214">214</span> +<span id="215">215</span> +<span id="216">216</span> +<span id="217">217</span> +<span id="218">218</span> +<span id="219">219</span> +<span id="220">220</span> +<span id="221">221</span> +<span id="222">222</span> +<span id="223">223</span> +<span id="224">224</span> +<span id="225">225</span> +<span id="226">226</span> +<span id="227">227</span> +<span id="228">228</span> +<span id="229">229</span> +<span id="230">230</span> +<span id="231">231</span> +<span id="232">232</span> +<span id="233">233</span> +<span id="234">234</span> +<span id="235">235</span> +<span id="236">236</span> +<span id="237">237</span> +<span id="238">238</span> +<span id="239">239</span> +<span id="240">240</span> +<span id="241">241</span> +<span id="242">242</span> +<span id="243">243</span> +<span id="244">244</span> +<span id="245">245</span> +<span id="246">246</span> +<span id="247">247</span> +<span id="248">248</span> +<span id="249">249</span> +<span id="250">250</span> +<span id="251">251</span> +<span id="252">252</span> +<span id="253">253</span> +<span id="254">254</span> +<span id="255">255</span> +<span id="256">256</span> +<span id="257">257</span> +<span id="258">258</span> +<span id="259">259</span> +<span id="260">260</span> +<span id="261">261</span> +<span id="262">262</span> +<span id="263">263</span> +<span id="264">264</span> +<span id="265">265</span> +<span id="266">266</span> +<span id="267">267</span> +<span id="268">268</span> +<span id="269">269</span> +<span id="270">270</span> +<span id="271">271</span> +<span id="272">272</span> +<span id="273">273</span> +<span id="274">274</span> +<span id="275">275</span> +<span id="276">276</span> +</pre><pre class='rust '> +<span class='comment'>// Tests for the serializer and deserializer are located in tests/serde_/mod.rs.</span> +<span class='comment'>// They can be run with `cargo test --features serde_tests`.</span> + +<span class='kw'>use</span> <span class='ident'>serde</span>::<span class='ident'>de</span>::{<span class='ident'>Deserializer</span> <span class='kw'>as</span> <span class='ident'>SerdeDeserializer</span>, <span class='ident'>Error</span> <span class='kw'>as</span> <span class='ident'>SerdeError</span>, <span class='ident'>Visitor</span>, <span class='ident'>SeqVisitor</span>, + <span class='ident'>MapVisitor</span>, <span class='ident'>VariantVisitor</span>, <span class='ident'>Deserialize</span>, <span class='ident'>EnumVisitor</span>}; +<span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>iter</span>::<span class='ident'>Peekable</span>; + +<span class='kw'>use</span> {<span class='ident'>Error</span>, <span class='ident'>PlistEvent</span>, <span class='ident'>u64_option_to_usize</span>}; + +<span class='macro'>macro_rules</span><span class='macro'>!</span> <span class='ident'>expect</span> { + (<span class='macro-nonterminal'>$</span><span class='macro-nonterminal'>next</span>:<span class='ident'>expr</span>, <span class='macro-nonterminal'>$</span><span class='macro-nonterminal'>pat</span>:<span class='ident'>pat</span>) <span class='op'>=></span> { + <span class='kw'>match</span> <span class='macro-nonterminal'>$</span><span class='macro-nonterminal'>next</span> { + <span class='prelude-val'>Some</span>(<span class='prelude-val'>Ok</span>(<span class='ident'>v</span>@<span class='macro-nonterminal'>$</span><span class='macro-nonterminal'>pat</span>)) <span class='op'>=></span> <span class='ident'>v</span>, + <span class='prelude-val'>None</span> <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>UnexpectedEof</span>), + _ <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>event_mismatch_error</span>()) + } + }; + (<span class='macro-nonterminal'>$</span><span class='macro-nonterminal'>next</span>:<span class='ident'>expr</span>, <span class='macro-nonterminal'>$</span><span class='macro-nonterminal'>pat</span>:<span class='ident'>pat</span> <span class='op'>=></span> <span class='macro-nonterminal'>$</span><span class='macro-nonterminal'>save</span>:<span class='ident'>expr</span>) <span class='op'>=></span> { + <span class='kw'>match</span> <span class='macro-nonterminal'>$</span><span class='macro-nonterminal'>next</span> { + <span class='prelude-val'>Some</span>(<span class='prelude-val'>Ok</span>(<span class='macro-nonterminal'>$</span><span class='macro-nonterminal'>pat</span>)) <span class='op'>=></span> <span class='macro-nonterminal'>$</span><span class='macro-nonterminal'>save</span>, + <span class='prelude-val'>None</span> <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>UnexpectedEof</span>), + _ <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>event_mismatch_error</span>()) + } + }; +} + +<span class='macro'>macro_rules</span><span class='macro'>!</span> <span class='ident'>try_next</span> { + (<span class='macro-nonterminal'>$</span><span class='macro-nonterminal'>next</span>:<span class='ident'>expr</span>) <span class='op'>=></span> { + <span class='kw'>match</span> <span class='macro-nonterminal'>$</span><span class='macro-nonterminal'>next</span> { + <span class='prelude-val'>Some</span>(<span class='prelude-val'>Ok</span>(<span class='ident'>v</span>)) <span class='op'>=></span> <span class='ident'>v</span>, + <span class='prelude-val'>Some</span>(<span class='prelude-val'>Err</span>(_)) <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>event_mismatch_error</span>()), + <span class='prelude-val'>None</span> <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>UnexpectedEof</span>) + } + } +} + +<span class='kw'>fn</span> <span class='ident'>event_mismatch_error</span>() <span class='op'>-></span> <span class='ident'>Error</span> { + <span class='ident'>Error</span>::<span class='ident'>InvalidData</span> +} + +<span class='kw'>impl</span> <span class='ident'>SerdeError</span> <span class='kw'>for</span> <span class='ident'>Error</span> { + <span class='kw'>fn</span> <span class='ident'>custom</span><span class='op'><</span><span class='ident'>T</span>: <span class='ident'>Into</span><span class='op'><</span><span class='ident'>String</span><span class='op'>>></span>(<span class='ident'>msg</span>: <span class='ident'>T</span>) <span class='op'>-></span> <span class='self'>Self</span> { + <span class='ident'>Error</span>::<span class='ident'>Serde</span>(<span class='ident'>msg</span>.<span class='ident'>into</span>()) + } + + <span class='kw'>fn</span> <span class='ident'>end_of_stream</span>() <span class='op'>-></span> <span class='self'>Self</span> { + <span class='ident'>Error</span>::<span class='ident'>UnexpectedEof</span> + } +} + +<span class='kw'>pub</span> <span class='kw'>struct</span> <span class='ident'>Deserializer</span><span class='op'><</span><span class='ident'>I</span><span class='op'>></span> + <span class='kw'>where</span> <span class='ident'>I</span>: <span class='ident'>IntoIterator</span><span class='op'><</span><span class='ident'>Item</span> <span class='op'>=</span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>PlistEvent</span>, <span class='ident'>Error</span><span class='op'>>></span> +{ + <span class='ident'>events</span>: <span class='ident'>Peekable</span><span class='op'><<</span><span class='ident'>I</span> <span class='kw'>as</span> <span class='ident'>IntoIterator</span><span class='op'>></span>::<span class='ident'>IntoIter</span><span class='op'>></span>, +} + +<span class='kw'>impl</span><span class='op'><</span><span class='ident'>I</span><span class='op'>></span> <span class='ident'>Deserializer</span><span class='op'><</span><span class='ident'>I</span><span class='op'>></span> <span class='kw'>where</span> <span class='ident'>I</span>: <span class='ident'>IntoIterator</span><span class='op'><</span><span class='ident'>Item</span> <span class='op'>=</span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>PlistEvent</span>, <span class='ident'>Error</span><span class='op'>>></span> +{ + <span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>new</span>(<span class='ident'>iter</span>: <span class='ident'>I</span>) <span class='op'>-></span> <span class='ident'>Deserializer</span><span class='op'><</span><span class='ident'>I</span><span class='op'>></span> { + <span class='ident'>Deserializer</span> { <span class='ident'>events</span>: <span class='ident'>iter</span>.<span class='ident'>into_iter</span>().<span class='ident'>peekable</span>() } + } +} + +<span class='kw'>impl</span><span class='op'><</span><span class='ident'>I</span><span class='op'>></span> <span class='ident'>SerdeDeserializer</span> <span class='kw'>for</span> <span class='ident'>Deserializer</span><span class='op'><</span><span class='ident'>I</span><span class='op'>></span> + <span class='kw'>where</span> <span class='ident'>I</span>: <span class='ident'>IntoIterator</span><span class='op'><</span><span class='ident'>Item</span> <span class='op'>=</span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>PlistEvent</span>, <span class='ident'>Error</span><span class='op'>>></span> +{ + <span class='kw'>type</span> <span class='ident'>Error</span> <span class='op'>=</span> <span class='ident'>Error</span>; + + <span class='kw'>fn</span> <span class='ident'>deserialize</span><span class='op'><</span><span class='ident'>V</span><span class='op'>></span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='kw-2'>mut</span> <span class='ident'>visitor</span>: <span class='ident'>V</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>V</span>::<span class='ident'>Value</span>, <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> + <span class='kw'>where</span> <span class='ident'>V</span>: <span class='ident'>Visitor</span> + { + <span class='kw'>match</span> <span class='macro'>try_next</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>events</span>.<span class='ident'>next</span>()) { + <span class='ident'>PlistEvent</span>::<span class='ident'>StartArray</span>(<span class='ident'>len</span>) <span class='op'>=></span> { + <span class='kw'>let</span> <span class='ident'>len</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>u64_option_to_usize</span>(<span class='ident'>len</span>)); + <span class='ident'>visitor</span>.<span class='ident'>visit_seq</span>(<span class='ident'>MapSeq</span>::<span class='ident'>new</span>(<span class='self'>self</span>, <span class='ident'>len</span>)) + } + <span class='ident'>PlistEvent</span>::<span class='ident'>EndArray</span> <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>event_mismatch_error</span>()), + + <span class='ident'>PlistEvent</span>::<span class='ident'>StartDictionary</span>(<span class='ident'>len</span>) <span class='op'>=></span> { + <span class='kw'>let</span> <span class='ident'>len</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>u64_option_to_usize</span>(<span class='ident'>len</span>)); + <span class='ident'>visitor</span>.<span class='ident'>visit_map</span>(<span class='ident'>MapSeq</span>::<span class='ident'>new</span>(<span class='self'>self</span>, <span class='ident'>len</span>)) + } + <span class='ident'>PlistEvent</span>::<span class='ident'>EndDictionary</span> <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>event_mismatch_error</span>()), + + <span class='ident'>PlistEvent</span>::<span class='ident'>BooleanValue</span>(<span class='ident'>v</span>) <span class='op'>=></span> <span class='ident'>visitor</span>.<span class='ident'>visit_bool</span>(<span class='ident'>v</span>), + <span class='ident'>PlistEvent</span>::<span class='ident'>DataValue</span>(<span class='ident'>v</span>) <span class='op'>=></span> <span class='ident'>visitor</span>.<span class='ident'>visit_byte_buf</span>(<span class='ident'>v</span>), + <span class='ident'>PlistEvent</span>::<span class='ident'>DateValue</span>(<span class='ident'>v</span>) <span class='op'>=></span> <span class='ident'>visitor</span>.<span class='ident'>visit_string</span>(<span class='ident'>v</span>.<span class='ident'>to_rfc3339</span>()), + <span class='ident'>PlistEvent</span>::<span class='ident'>IntegerValue</span>(<span class='ident'>v</span>) <span class='kw'>if</span> <span class='ident'>v</span>.<span class='ident'>is_positive</span>() <span class='op'>=></span> <span class='ident'>visitor</span>.<span class='ident'>visit_u64</span>(<span class='ident'>v</span> <span class='kw'>as</span> <span class='ident'>u64</span>), + <span class='ident'>PlistEvent</span>::<span class='ident'>IntegerValue</span>(<span class='ident'>v</span>) <span class='op'>=></span> <span class='ident'>visitor</span>.<span class='ident'>visit_i64</span>(<span class='ident'>v</span> <span class='kw'>as</span> <span class='ident'>i64</span>), + <span class='ident'>PlistEvent</span>::<span class='ident'>RealValue</span>(<span class='ident'>v</span>) <span class='op'>=></span> <span class='ident'>visitor</span>.<span class='ident'>visit_f64</span>(<span class='ident'>v</span>), + <span class='ident'>PlistEvent</span>::<span class='ident'>StringValue</span>(<span class='ident'>v</span>) <span class='op'>=></span> <span class='ident'>visitor</span>.<span class='ident'>visit_string</span>(<span class='ident'>v</span>), + } + } + + <span class='kw'>fn</span> <span class='ident'>deserialize_unit</span><span class='op'><</span><span class='ident'>V</span><span class='op'>></span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='kw-2'>mut</span> <span class='ident'>visitor</span>: <span class='ident'>V</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>V</span>::<span class='ident'>Value</span>, <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> + <span class='kw'>where</span> <span class='ident'>V</span>: <span class='ident'>Visitor</span> + { + <span class='macro'>expect</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>events</span>.<span class='ident'>next</span>(), <span class='ident'>PlistEvent</span>::<span class='ident'>StringValue</span>(_)); + <span class='ident'>visitor</span>.<span class='ident'>visit_unit</span>() + } + + <span class='kw'>fn</span> <span class='ident'>deserialize_option</span><span class='op'><</span><span class='ident'>V</span><span class='op'>></span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='kw-2'>mut</span> <span class='ident'>visitor</span>: <span class='ident'>V</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>V</span>::<span class='ident'>Value</span>, <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> + <span class='kw'>where</span> <span class='ident'>V</span>: <span class='ident'>Visitor</span> + { + <span class='macro'>expect</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>events</span>.<span class='ident'>next</span>(), <span class='ident'>PlistEvent</span>::<span class='ident'>StartDictionary</span>(_)); + + <span class='kw'>let</span> <span class='ident'>ret</span> <span class='op'>=</span> <span class='kw'>match</span> <span class='macro'>try_next</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>events</span>.<span class='ident'>next</span>()) { + <span class='ident'>PlistEvent</span>::<span class='ident'>StringValue</span>(<span class='kw-2'>ref</span> <span class='ident'>s</span>) <span class='kw'>if</span> <span class='kw-2'>&</span><span class='ident'>s</span>[..] <span class='op'>==</span> <span class='string'>"None"</span> <span class='op'>=></span> { + <span class='kw'>let</span> <span class='ident'>ret</span> <span class='op'>=</span> <span class='kw'>match</span> <span class='ident'>visitor</span>.<span class='ident'>visit_none</span>() { + <span class='prelude-val'>Ok</span>(<span class='ident'>ret</span>) <span class='op'>=></span> <span class='ident'>ret</span>, + <span class='prelude-val'>Err</span>(<span class='ident'>e</span>) <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>e</span>), + }; + <span class='comment'>// For some reason the try! below doesn't work - probably a macro hygene issue</span> + <span class='comment'>// with Error and ::Error</span> + <span class='comment'>// let ret = try!(visitor.visit_none());</span> + <span class='macro'>expect</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>events</span>.<span class='ident'>next</span>(), <span class='ident'>PlistEvent</span>::<span class='ident'>StringValue</span>(_)); + <span class='ident'>ret</span> + } + <span class='ident'>PlistEvent</span>::<span class='ident'>StringValue</span>(<span class='kw-2'>ref</span> <span class='ident'>s</span>) <span class='kw'>if</span> <span class='kw-2'>&</span><span class='ident'>s</span>[..] <span class='op'>==</span> <span class='string'>"Some"</span> <span class='op'>=></span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>visitor</span>.<span class='ident'>visit_some</span>(<span class='self'>self</span>)), + _ <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>event_mismatch_error</span>()), + }; + + <span class='macro'>expect</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>events</span>.<span class='ident'>next</span>(), <span class='ident'>PlistEvent</span>::<span class='ident'>EndDictionary</span>); + + <span class='prelude-val'>Ok</span>(<span class='ident'>ret</span>) + } + + <span class='kw'>fn</span> <span class='ident'>deserialize_newtype_struct</span><span class='op'><</span><span class='ident'>V</span><span class='op'>></span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, + <span class='ident'>_name</span>: <span class='kw-2'>&</span><span class='lifetime'>'static</span> <span class='ident'>str</span>, + <span class='kw-2'>mut</span> <span class='ident'>visitor</span>: <span class='ident'>V</span>) + <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>V</span>::<span class='ident'>Value</span>, <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> + <span class='kw'>where</span> <span class='ident'>V</span>: <span class='ident'>Visitor</span> + { + <span class='ident'>visitor</span>.<span class='ident'>visit_newtype_struct</span>(<span class='self'>self</span>) + } + + <span class='kw'>fn</span> <span class='ident'>deserialize_enum</span><span class='op'><</span><span class='ident'>V</span><span class='op'>></span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, + <span class='ident'>_enum</span>: <span class='kw-2'>&</span><span class='lifetime'>'static</span> <span class='ident'>str</span>, + <span class='ident'>_variants</span>: <span class='kw-2'>&</span><span class='lifetime'>'static</span> [<span class='kw-2'>&</span><span class='lifetime'>'static</span> <span class='ident'>str</span>], + <span class='kw-2'>mut</span> <span class='ident'>visitor</span>: <span class='ident'>V</span>) + <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>V</span>::<span class='ident'>Value</span>, <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> + <span class='kw'>where</span> <span class='ident'>V</span>: <span class='ident'>EnumVisitor</span> + { + <span class='macro'>expect</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>events</span>.<span class='ident'>next</span>(), <span class='ident'>PlistEvent</span>::<span class='ident'>StartDictionary</span>(_)); + <span class='kw'>let</span> <span class='ident'>ret</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>visitor</span>.<span class='ident'>visit</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='op'>*</span><span class='self'>self</span>)); + <span class='macro'>expect</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>events</span>.<span class='ident'>next</span>(), <span class='ident'>PlistEvent</span>::<span class='ident'>EndDictionary</span>); + <span class='prelude-val'>Ok</span>(<span class='ident'>ret</span>) + } +} + +<span class='kw'>impl</span><span class='op'><</span><span class='ident'>I</span><span class='op'>></span> <span class='ident'>VariantVisitor</span> <span class='kw'>for</span> <span class='ident'>Deserializer</span><span class='op'><</span><span class='ident'>I</span><span class='op'>></span> <span class='kw'>where</span> <span class='ident'>I</span>: <span class='ident'>IntoIterator</span><span class='op'><</span><span class='ident'>Item</span> <span class='op'>=</span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>PlistEvent</span>, <span class='ident'>Error</span><span class='op'>>></span> +{ + <span class='kw'>type</span> <span class='ident'>Error</span> <span class='op'>=</span> <span class='ident'>Error</span>; + + <span class='kw'>fn</span> <span class='ident'>visit_variant</span><span class='op'><</span><span class='ident'>V</span><span class='op'>></span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>V</span>, <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> + <span class='kw'>where</span> <span class='ident'>V</span>: <span class='ident'>Deserialize</span> + { + <span class='op'><</span><span class='ident'>V</span> <span class='kw'>as</span> <span class='ident'>Deserialize</span><span class='op'>></span>::<span class='ident'>deserialize</span>(<span class='self'>self</span>) + } + + <span class='kw'>fn</span> <span class='ident'>visit_unit</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>(), <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> { + <span class='op'><</span>() <span class='kw'>as</span> <span class='ident'>Deserialize</span><span class='op'>></span>::<span class='ident'>deserialize</span>(<span class='self'>self</span>) + } + + <span class='kw'>fn</span> <span class='ident'>visit_newtype</span><span class='op'><</span><span class='ident'>T</span><span class='op'>></span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>T</span>, <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> + <span class='kw'>where</span> <span class='ident'>T</span>: <span class='ident'>Deserialize</span> + { + <span class='op'><</span><span class='ident'>T</span> <span class='kw'>as</span> <span class='ident'>Deserialize</span><span class='op'>></span>::<span class='ident'>deserialize</span>(<span class='self'>self</span>) + } + + <span class='kw'>fn</span> <span class='ident'>visit_tuple</span><span class='op'><</span><span class='ident'>V</span><span class='op'>></span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>len</span>: <span class='ident'>usize</span>, <span class='ident'>visitor</span>: <span class='ident'>V</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>V</span>::<span class='ident'>Value</span>, <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> + <span class='kw'>where</span> <span class='ident'>V</span>: <span class='ident'>Visitor</span> + { + <span class='op'><</span><span class='self'>Self</span> <span class='kw'>as</span> <span class='ident'>SerdeDeserializer</span><span class='op'>></span>::<span class='ident'>deserialize_tuple</span>(<span class='self'>self</span>, <span class='ident'>len</span>, <span class='ident'>visitor</span>) + } + + <span class='kw'>fn</span> <span class='ident'>visit_struct</span><span class='op'><</span><span class='ident'>V</span><span class='op'>></span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, + <span class='ident'>fields</span>: <span class='kw-2'>&</span><span class='lifetime'>'static</span> [<span class='kw-2'>&</span><span class='lifetime'>'static</span> <span class='ident'>str</span>], + <span class='ident'>visitor</span>: <span class='ident'>V</span>) + <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>V</span>::<span class='ident'>Value</span>, <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> + <span class='kw'>where</span> <span class='ident'>V</span>: <span class='ident'>Visitor</span> + { + <span class='kw'>let</span> <span class='ident'>name</span> <span class='op'>=</span> <span class='string'>""</span>; + <span class='op'><</span><span class='self'>Self</span> <span class='kw'>as</span> <span class='ident'>SerdeDeserializer</span><span class='op'>></span>::<span class='ident'>deserialize_struct</span>(<span class='self'>self</span>, <span class='ident'>name</span>, <span class='ident'>fields</span>, <span class='ident'>visitor</span>) + } +} + +<span class='kw'>struct</span> <span class='ident'>MapSeq</span><span class='op'><</span><span class='lifetime'>'a</span>, <span class='ident'>I</span><span class='op'>></span> + <span class='kw'>where</span> <span class='ident'>I</span>: <span class='lifetime'>'a</span> <span class='op'>+</span> <span class='ident'>IntoIterator</span><span class='op'><</span><span class='ident'>Item</span> <span class='op'>=</span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>PlistEvent</span>, <span class='ident'>Error</span><span class='op'>>></span> +{ + <span class='ident'>de</span>: <span class='kw-2'>&</span><span class='lifetime'>'a</span> <span class='kw-2'>mut</span> <span class='ident'>Deserializer</span><span class='op'><</span><span class='ident'>I</span><span class='op'>></span>, + <span class='ident'>remaining</span>: <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>usize</span><span class='op'>></span>, + <span class='ident'>finished</span>: <span class='ident'>bool</span>, +} + +<span class='kw'>impl</span><span class='op'><</span><span class='lifetime'>'a</span>, <span class='ident'>I</span><span class='op'>></span> <span class='ident'>MapSeq</span><span class='op'><</span><span class='lifetime'>'a</span>, <span class='ident'>I</span><span class='op'>></span> <span class='kw'>where</span> <span class='ident'>I</span>: <span class='lifetime'>'a</span> <span class='op'>+</span> <span class='ident'>IntoIterator</span><span class='op'><</span><span class='ident'>Item</span> <span class='op'>=</span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>PlistEvent</span>, <span class='ident'>Error</span><span class='op'>>></span> +{ + <span class='kw'>fn</span> <span class='ident'>new</span>(<span class='ident'>de</span>: <span class='kw-2'>&</span><span class='lifetime'>'a</span> <span class='kw-2'>mut</span> <span class='ident'>Deserializer</span><span class='op'><</span><span class='ident'>I</span><span class='op'>></span>, <span class='ident'>len</span>: <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>usize</span><span class='op'>></span>) <span class='op'>-></span> <span class='ident'>MapSeq</span><span class='op'><</span><span class='lifetime'>'a</span>, <span class='ident'>I</span><span class='op'>></span> { + <span class='ident'>MapSeq</span> { + <span class='ident'>de</span>: <span class='ident'>de</span>, + <span class='ident'>remaining</span>: <span class='ident'>len</span>, + <span class='ident'>finished</span>: <span class='bool-val'>false</span>, + } + } +} + +<span class='kw'>impl</span><span class='op'><</span><span class='lifetime'>'a</span>, <span class='ident'>I</span><span class='op'>></span> <span class='ident'>SeqVisitor</span> <span class='kw'>for</span> <span class='ident'>MapSeq</span><span class='op'><</span><span class='lifetime'>'a</span>, <span class='ident'>I</span><span class='op'>></span> + <span class='kw'>where</span> <span class='ident'>I</span>: <span class='lifetime'>'a</span> <span class='op'>+</span> <span class='ident'>IntoIterator</span><span class='op'><</span><span class='ident'>Item</span> <span class='op'>=</span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>PlistEvent</span>, <span class='ident'>Error</span><span class='op'>>></span> +{ + <span class='kw'>type</span> <span class='ident'>Error</span> <span class='op'>=</span> <span class='ident'>Error</span>; + + <span class='kw'>fn</span> <span class='ident'>visit</span><span class='op'><</span><span class='ident'>T</span><span class='op'>></span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>T</span><span class='op'>></span>, <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> + <span class='kw'>where</span> <span class='ident'>T</span>: <span class='ident'>Deserialize</span> + { + <span class='kw'>match</span> <span class='self'>self</span>.<span class='ident'>de</span>.<span class='ident'>events</span>.<span class='ident'>peek</span>() { + <span class='prelude-val'>Some</span>(<span class='kw-2'>&</span><span class='prelude-val'>Ok</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>EndArray</span>)) <span class='op'>=></span> { + <span class='self'>self</span>.<span class='ident'>de</span>.<span class='ident'>events</span>.<span class='ident'>next</span>(); + <span class='self'>self</span>.<span class='ident'>finished</span> <span class='op'>=</span> <span class='bool-val'>true</span>; + <span class='kw'>return</span> <span class='prelude-val'>Ok</span>(<span class='prelude-val'>None</span>); + } + _ <span class='op'>=></span> <span class='op'><</span><span class='ident'>T</span> <span class='kw'>as</span> <span class='ident'>Deserialize</span><span class='op'>></span>::<span class='ident'>deserialize</span>(<span class='self'>self</span>.<span class='ident'>de</span>).<span class='ident'>map</span>(<span class='op'>|</span><span class='ident'>k</span><span class='op'>|</span> <span class='prelude-val'>Some</span>(<span class='ident'>k</span>)), + } + } + + <span class='kw'>fn</span> <span class='ident'>end</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>(), <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> { + <span class='kw'>if</span> <span class='op'>!</span><span class='self'>self</span>.<span class='ident'>finished</span> { + <span class='self'>self</span>.<span class='ident'>finished</span> <span class='op'>=</span> <span class='bool-val'>true</span>; + <span class='macro'>expect</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>de</span>.<span class='ident'>events</span>.<span class='ident'>next</span>(), <span class='ident'>PlistEvent</span>::<span class='ident'>EndArray</span>); + } + <span class='prelude-val'>Ok</span>(()) + } + + <span class='kw'>fn</span> <span class='ident'>size_hint</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> (<span class='ident'>usize</span>, <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>usize</span><span class='op'>></span>) { + <span class='op'><</span><span class='self'>Self</span> <span class='kw'>as</span> <span class='ident'>MapVisitor</span><span class='op'>></span>::<span class='ident'>size_hint</span>(<span class='self'>self</span>) + } +} + +<span class='kw'>impl</span><span class='op'><</span><span class='lifetime'>'a</span>, <span class='ident'>I</span><span class='op'>></span> <span class='ident'>MapVisitor</span> <span class='kw'>for</span> <span class='ident'>MapSeq</span><span class='op'><</span><span class='lifetime'>'a</span>, <span class='ident'>I</span><span class='op'>></span> + <span class='kw'>where</span> <span class='ident'>I</span>: <span class='lifetime'>'a</span> <span class='op'>+</span> <span class='ident'>IntoIterator</span><span class='op'><</span><span class='ident'>Item</span> <span class='op'>=</span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>PlistEvent</span>, <span class='ident'>Error</span><span class='op'>>></span> +{ + <span class='kw'>type</span> <span class='ident'>Error</span> <span class='op'>=</span> <span class='ident'>Error</span>; + + <span class='kw'>fn</span> <span class='ident'>visit_key</span><span class='op'><</span><span class='ident'>K</span><span class='op'>></span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>K</span><span class='op'>></span>, <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> + <span class='kw'>where</span> <span class='ident'>K</span>: <span class='ident'>Deserialize</span> + { + <span class='kw'>match</span> <span class='self'>self</span>.<span class='ident'>de</span>.<span class='ident'>events</span>.<span class='ident'>peek</span>() { + <span class='prelude-val'>Some</span>(<span class='kw-2'>&</span><span class='prelude-val'>Ok</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>EndDictionary</span>)) <span class='op'>=></span> { + <span class='self'>self</span>.<span class='ident'>de</span>.<span class='ident'>events</span>.<span class='ident'>next</span>(); + <span class='self'>self</span>.<span class='ident'>finished</span> <span class='op'>=</span> <span class='bool-val'>true</span>; + <span class='kw'>return</span> <span class='prelude-val'>Ok</span>(<span class='prelude-val'>None</span>); + } + _ <span class='op'>=></span> <span class='op'><</span><span class='ident'>K</span> <span class='kw'>as</span> <span class='ident'>Deserialize</span><span class='op'>></span>::<span class='ident'>deserialize</span>(<span class='self'>self</span>.<span class='ident'>de</span>).<span class='ident'>map</span>(<span class='op'>|</span><span class='ident'>k</span><span class='op'>|</span> <span class='prelude-val'>Some</span>(<span class='ident'>k</span>)), + } + } + + <span class='kw'>fn</span> <span class='ident'>visit_value</span><span class='op'><</span><span class='ident'>V</span><span class='op'>></span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>V</span>, <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> + <span class='kw'>where</span> <span class='ident'>V</span>: <span class='ident'>Deserialize</span> + { + <span class='op'><</span><span class='ident'>V</span> <span class='kw'>as</span> <span class='ident'>Deserialize</span><span class='op'>></span>::<span class='ident'>deserialize</span>(<span class='self'>self</span>.<span class='ident'>de</span>) + } + + <span class='kw'>fn</span> <span class='ident'>end</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>(), <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> { + <span class='kw'>if</span> <span class='op'>!</span><span class='self'>self</span>.<span class='ident'>finished</span> { + <span class='self'>self</span>.<span class='ident'>finished</span> <span class='op'>=</span> <span class='bool-val'>true</span>; + <span class='macro'>expect</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>de</span>.<span class='ident'>events</span>.<span class='ident'>next</span>(), <span class='ident'>PlistEvent</span>::<span class='ident'>EndDictionary</span>); + } + <span class='prelude-val'>Ok</span>(()) + } + + <span class='kw'>fn</span> <span class='ident'>size_hint</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> (<span class='ident'>usize</span>, <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>usize</span><span class='op'>></span>) { + <span class='kw'>match</span> <span class='self'>self</span>.<span class='ident'>remaining</span> { + <span class='prelude-val'>Some</span>(<span class='ident'>len</span>) <span class='op'>=></span> (<span class='ident'>len</span>, <span class='prelude-val'>Some</span>(<span class='ident'>len</span>)), + <span class='prelude-val'>None</span> <span class='op'>=></span> (<span class='number'>0</span>, <span class='prelude-val'>None</span>), + } + } +} +</pre> +</section> + <section id='search' class="content hidden"></section> + + <section class="footer"></section> + + <aside id="help" class="hidden"> + <div> + <h1 class="hidden">Help</h1> + + <div class="shortcuts"> + <h2>Keyboard Shortcuts</h2> + + <dl> + <dt>?</dt> + <dd>Show this help dialog</dd> + <dt>S</dt> + <dd>Focus the search field</dd> + <dt>⇤</dt> + <dd>Move up in search results</dd> + <dt>⇥</dt> + <dd>Move down in search results</dd> + <dt>⏎</dt> + <dd>Go to active search result</dd> + <dt>+</dt> + <dd>Collapse/expand all sections</dd> + </dl> + </div> + + <div class="infos"> + <h2>Search Tricks</h2> + + <p> + Prefix searches with a type followed by a colon (e.g. + <code>fn:</code>) to restrict the search to a given type. + </p> + + <p> + Accepted types are: <code>fn</code>, <code>mod</code>, + <code>struct</code>, <code>enum</code>, + <code>trait</code>, <code>type</code>, <code>macro</code>, + and <code>const</code>. + </p> + + <p> + Search functions by type signature (e.g. + <code>vec -> usize</code> or <code>* -> vec</code>) + </p> + </div> + </div> + </aside> + + + + <script> + window.rootPath = "../../../"; + window.currentCrate = "plist"; + </script> + <script src="../../../jquery.js"></script> + <script src="../../../main.js"></script> + <script defer src="../../../search-index.js"></script> +</body> +</html>
\ No newline at end of file diff --git a/src/plist/src/lib.rs.html b/src/plist/src/lib.rs.html new file mode 100644 index 0000000..304566c --- /dev/null +++ b/src/plist/src/lib.rs.html @@ -0,0 +1,1216 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="generator" content="rustdoc"> + <meta name="description" content="Source to the Rust file `src/lib.rs`."> + <meta name="keywords" content="rust, rustlang, rust-lang"> + + <title>lib.rs.html -- source</title> + + <link rel="stylesheet" type="text/css" href="../../../rustdoc.css"> + <link rel="stylesheet" type="text/css" href="../../../main.css"> + + + + +</head> +<body class="rustdoc"> + <!--[if lte IE 8]> + <div class="warning"> + This old browser is unsupported and will most likely display funky + things. + </div> + <![endif]--> + + + + <nav class="sidebar"> + + + </nav> + + <nav class="sub"> + <form class="search-form js-only"> + <div class="search-container"> + <input class="search-input" name="search" + autocomplete="off" + placeholder="Click or press ‘S’ to search, ‘?’ for more options…" + type="search"> + </div> + </form> + </nav> + + <section id='main' class="content source"><pre class="line-numbers"><span id="1"> 1</span> +<span id="2"> 2</span> +<span id="3"> 3</span> +<span id="4"> 4</span> +<span id="5"> 5</span> +<span id="6"> 6</span> +<span id="7"> 7</span> +<span id="8"> 8</span> +<span id="9"> 9</span> +<span id="10"> 10</span> +<span id="11"> 11</span> +<span id="12"> 12</span> +<span id="13"> 13</span> +<span id="14"> 14</span> +<span id="15"> 15</span> +<span id="16"> 16</span> +<span id="17"> 17</span> +<span id="18"> 18</span> +<span id="19"> 19</span> +<span id="20"> 20</span> +<span id="21"> 21</span> +<span id="22"> 22</span> +<span id="23"> 23</span> +<span id="24"> 24</span> +<span id="25"> 25</span> +<span id="26"> 26</span> +<span id="27"> 27</span> +<span id="28"> 28</span> +<span id="29"> 29</span> +<span id="30"> 30</span> +<span id="31"> 31</span> +<span id="32"> 32</span> +<span id="33"> 33</span> +<span id="34"> 34</span> +<span id="35"> 35</span> +<span id="36"> 36</span> +<span id="37"> 37</span> +<span id="38"> 38</span> +<span id="39"> 39</span> +<span id="40"> 40</span> +<span id="41"> 41</span> +<span id="42"> 42</span> +<span id="43"> 43</span> +<span id="44"> 44</span> +<span id="45"> 45</span> +<span id="46"> 46</span> +<span id="47"> 47</span> +<span id="48"> 48</span> +<span id="49"> 49</span> +<span id="50"> 50</span> +<span id="51"> 51</span> +<span id="52"> 52</span> +<span id="53"> 53</span> +<span id="54"> 54</span> +<span id="55"> 55</span> +<span id="56"> 56</span> +<span id="57"> 57</span> +<span id="58"> 58</span> +<span id="59"> 59</span> +<span id="60"> 60</span> +<span id="61"> 61</span> +<span id="62"> 62</span> +<span id="63"> 63</span> +<span id="64"> 64</span> +<span id="65"> 65</span> +<span id="66"> 66</span> +<span id="67"> 67</span> +<span id="68"> 68</span> +<span id="69"> 69</span> +<span id="70"> 70</span> +<span id="71"> 71</span> +<span id="72"> 72</span> +<span id="73"> 73</span> +<span id="74"> 74</span> +<span id="75"> 75</span> +<span id="76"> 76</span> +<span id="77"> 77</span> +<span id="78"> 78</span> +<span id="79"> 79</span> +<span id="80"> 80</span> +<span id="81"> 81</span> +<span id="82"> 82</span> +<span id="83"> 83</span> +<span id="84"> 84</span> +<span id="85"> 85</span> +<span id="86"> 86</span> +<span id="87"> 87</span> +<span id="88"> 88</span> +<span id="89"> 89</span> +<span id="90"> 90</span> +<span id="91"> 91</span> +<span id="92"> 92</span> +<span id="93"> 93</span> +<span id="94"> 94</span> +<span id="95"> 95</span> +<span id="96"> 96</span> +<span id="97"> 97</span> +<span id="98"> 98</span> +<span id="99"> 99</span> +<span id="100">100</span> +<span id="101">101</span> +<span id="102">102</span> +<span id="103">103</span> +<span id="104">104</span> +<span id="105">105</span> +<span id="106">106</span> +<span id="107">107</span> +<span id="108">108</span> +<span id="109">109</span> +<span id="110">110</span> +<span id="111">111</span> +<span id="112">112</span> +<span id="113">113</span> +<span id="114">114</span> +<span id="115">115</span> +<span id="116">116</span> +<span id="117">117</span> +<span id="118">118</span> +<span id="119">119</span> +<span id="120">120</span> +<span id="121">121</span> +<span id="122">122</span> +<span id="123">123</span> +<span id="124">124</span> +<span id="125">125</span> +<span id="126">126</span> +<span id="127">127</span> +<span id="128">128</span> +<span id="129">129</span> +<span id="130">130</span> +<span id="131">131</span> +<span id="132">132</span> +<span id="133">133</span> +<span id="134">134</span> +<span id="135">135</span> +<span id="136">136</span> +<span id="137">137</span> +<span id="138">138</span> +<span id="139">139</span> +<span id="140">140</span> +<span id="141">141</span> +<span id="142">142</span> +<span id="143">143</span> +<span id="144">144</span> +<span id="145">145</span> +<span id="146">146</span> +<span id="147">147</span> +<span id="148">148</span> +<span id="149">149</span> +<span id="150">150</span> +<span id="151">151</span> +<span id="152">152</span> +<span id="153">153</span> +<span id="154">154</span> +<span id="155">155</span> +<span id="156">156</span> +<span id="157">157</span> +<span id="158">158</span> +<span id="159">159</span> +<span id="160">160</span> +<span id="161">161</span> +<span id="162">162</span> +<span id="163">163</span> +<span id="164">164</span> +<span id="165">165</span> +<span id="166">166</span> +<span id="167">167</span> +<span id="168">168</span> +<span id="169">169</span> +<span id="170">170</span> +<span id="171">171</span> +<span id="172">172</span> +<span id="173">173</span> +<span id="174">174</span> +<span id="175">175</span> +<span id="176">176</span> +<span id="177">177</span> +<span id="178">178</span> +<span id="179">179</span> +<span id="180">180</span> +<span id="181">181</span> +<span id="182">182</span> +<span id="183">183</span> +<span id="184">184</span> +<span id="185">185</span> +<span id="186">186</span> +<span id="187">187</span> +<span id="188">188</span> +<span id="189">189</span> +<span id="190">190</span> +<span id="191">191</span> +<span id="192">192</span> +<span id="193">193</span> +<span id="194">194</span> +<span id="195">195</span> +<span id="196">196</span> +<span id="197">197</span> +<span id="198">198</span> +<span id="199">199</span> +<span id="200">200</span> +<span id="201">201</span> +<span id="202">202</span> +<span id="203">203</span> +<span id="204">204</span> +<span id="205">205</span> +<span id="206">206</span> +<span id="207">207</span> +<span id="208">208</span> +<span id="209">209</span> +<span id="210">210</span> +<span id="211">211</span> +<span id="212">212</span> +<span id="213">213</span> +<span id="214">214</span> +<span id="215">215</span> +<span id="216">216</span> +<span id="217">217</span> +<span id="218">218</span> +<span id="219">219</span> +<span id="220">220</span> +<span id="221">221</span> +<span id="222">222</span> +<span id="223">223</span> +<span id="224">224</span> +<span id="225">225</span> +<span id="226">226</span> +<span id="227">227</span> +<span id="228">228</span> +<span id="229">229</span> +<span id="230">230</span> +<span id="231">231</span> +<span id="232">232</span> +<span id="233">233</span> +<span id="234">234</span> +<span id="235">235</span> +<span id="236">236</span> +<span id="237">237</span> +<span id="238">238</span> +<span id="239">239</span> +<span id="240">240</span> +<span id="241">241</span> +<span id="242">242</span> +<span id="243">243</span> +<span id="244">244</span> +<span id="245">245</span> +<span id="246">246</span> +<span id="247">247</span> +<span id="248">248</span> +<span id="249">249</span> +<span id="250">250</span> +<span id="251">251</span> +<span id="252">252</span> +<span id="253">253</span> +<span id="254">254</span> +<span id="255">255</span> +<span id="256">256</span> +<span id="257">257</span> +<span id="258">258</span> +<span id="259">259</span> +<span id="260">260</span> +<span id="261">261</span> +<span id="262">262</span> +<span id="263">263</span> +<span id="264">264</span> +<span id="265">265</span> +<span id="266">266</span> +<span id="267">267</span> +<span id="268">268</span> +<span id="269">269</span> +<span id="270">270</span> +<span id="271">271</span> +<span id="272">272</span> +<span id="273">273</span> +<span id="274">274</span> +<span id="275">275</span> +<span id="276">276</span> +<span id="277">277</span> +<span id="278">278</span> +<span id="279">279</span> +<span id="280">280</span> +<span id="281">281</span> +<span id="282">282</span> +<span id="283">283</span> +<span id="284">284</span> +<span id="285">285</span> +<span id="286">286</span> +<span id="287">287</span> +<span id="288">288</span> +<span id="289">289</span> +<span id="290">290</span> +<span id="291">291</span> +<span id="292">292</span> +<span id="293">293</span> +<span id="294">294</span> +<span id="295">295</span> +<span id="296">296</span> +<span id="297">297</span> +<span id="298">298</span> +<span id="299">299</span> +<span id="300">300</span> +<span id="301">301</span> +<span id="302">302</span> +<span id="303">303</span> +<span id="304">304</span> +<span id="305">305</span> +<span id="306">306</span> +<span id="307">307</span> +<span id="308">308</span> +<span id="309">309</span> +<span id="310">310</span> +<span id="311">311</span> +<span id="312">312</span> +<span id="313">313</span> +<span id="314">314</span> +<span id="315">315</span> +<span id="316">316</span> +<span id="317">317</span> +<span id="318">318</span> +<span id="319">319</span> +<span id="320">320</span> +<span id="321">321</span> +<span id="322">322</span> +<span id="323">323</span> +<span id="324">324</span> +<span id="325">325</span> +<span id="326">326</span> +<span id="327">327</span> +<span id="328">328</span> +<span id="329">329</span> +<span id="330">330</span> +<span id="331">331</span> +<span id="332">332</span> +<span id="333">333</span> +<span id="334">334</span> +<span id="335">335</span> +<span id="336">336</span> +<span id="337">337</span> +<span id="338">338</span> +<span id="339">339</span> +<span id="340">340</span> +<span id="341">341</span> +<span id="342">342</span> +<span id="343">343</span> +<span id="344">344</span> +<span id="345">345</span> +<span id="346">346</span> +<span id="347">347</span> +<span id="348">348</span> +<span id="349">349</span> +<span id="350">350</span> +<span id="351">351</span> +<span id="352">352</span> +<span id="353">353</span> +<span id="354">354</span> +<span id="355">355</span> +<span id="356">356</span> +<span id="357">357</span> +<span id="358">358</span> +<span id="359">359</span> +<span id="360">360</span> +<span id="361">361</span> +<span id="362">362</span> +<span id="363">363</span> +<span id="364">364</span> +<span id="365">365</span> +<span id="366">366</span> +<span id="367">367</span> +<span id="368">368</span> +<span id="369">369</span> +<span id="370">370</span> +<span id="371">371</span> +<span id="372">372</span> +<span id="373">373</span> +<span id="374">374</span> +<span id="375">375</span> +<span id="376">376</span> +<span id="377">377</span> +<span id="378">378</span> +<span id="379">379</span> +<span id="380">380</span> +<span id="381">381</span> +<span id="382">382</span> +<span id="383">383</span> +<span id="384">384</span> +<span id="385">385</span> +<span id="386">386</span> +<span id="387">387</span> +<span id="388">388</span> +<span id="389">389</span> +<span id="390">390</span> +<span id="391">391</span> +<span id="392">392</span> +<span id="393">393</span> +<span id="394">394</span> +<span id="395">395</span> +<span id="396">396</span> +<span id="397">397</span> +<span id="398">398</span> +<span id="399">399</span> +<span id="400">400</span> +<span id="401">401</span> +<span id="402">402</span> +<span id="403">403</span> +<span id="404">404</span> +<span id="405">405</span> +<span id="406">406</span> +<span id="407">407</span> +<span id="408">408</span> +<span id="409">409</span> +<span id="410">410</span> +<span id="411">411</span> +<span id="412">412</span> +<span id="413">413</span> +<span id="414">414</span> +<span id="415">415</span> +<span id="416">416</span> +<span id="417">417</span> +<span id="418">418</span> +<span id="419">419</span> +<span id="420">420</span> +<span id="421">421</span> +<span id="422">422</span> +<span id="423">423</span> +<span id="424">424</span> +<span id="425">425</span> +<span id="426">426</span> +<span id="427">427</span> +<span id="428">428</span> +<span id="429">429</span> +<span id="430">430</span> +<span id="431">431</span> +<span id="432">432</span> +<span id="433">433</span> +<span id="434">434</span> +<span id="435">435</span> +<span id="436">436</span> +<span id="437">437</span> +<span id="438">438</span> +<span id="439">439</span> +<span id="440">440</span> +<span id="441">441</span> +<span id="442">442</span> +<span id="443">443</span> +<span id="444">444</span> +<span id="445">445</span> +<span id="446">446</span> +<span id="447">447</span> +<span id="448">448</span> +<span id="449">449</span> +<span id="450">450</span> +<span id="451">451</span> +<span id="452">452</span> +<span id="453">453</span> +<span id="454">454</span> +<span id="455">455</span> +<span id="456">456</span> +<span id="457">457</span> +<span id="458">458</span> +<span id="459">459</span> +<span id="460">460</span> +<span id="461">461</span> +<span id="462">462</span> +<span id="463">463</span> +<span id="464">464</span> +<span id="465">465</span> +<span id="466">466</span> +<span id="467">467</span> +<span id="468">468</span> +<span id="469">469</span> +<span id="470">470</span> +<span id="471">471</span> +<span id="472">472</span> +<span id="473">473</span> +<span id="474">474</span> +<span id="475">475</span> +<span id="476">476</span> +<span id="477">477</span> +<span id="478">478</span> +<span id="479">479</span> +<span id="480">480</span> +<span id="481">481</span> +<span id="482">482</span> +<span id="483">483</span> +<span id="484">484</span> +<span id="485">485</span> +<span id="486">486</span> +<span id="487">487</span> +<span id="488">488</span> +<span id="489">489</span> +<span id="490">490</span> +<span id="491">491</span> +<span id="492">492</span> +<span id="493">493</span> +<span id="494">494</span> +<span id="495">495</span> +<span id="496">496</span> +<span id="497">497</span> +<span id="498">498</span> +<span id="499">499</span> +<span id="500">500</span> +<span id="501">501</span> +<span id="502">502</span> +<span id="503">503</span> +<span id="504">504</span> +<span id="505">505</span> +<span id="506">506</span> +<span id="507">507</span> +<span id="508">508</span> +<span id="509">509</span> +<span id="510">510</span> +<span id="511">511</span> +<span id="512">512</span> +<span id="513">513</span> +<span id="514">514</span> +<span id="515">515</span> +<span id="516">516</span> +<span id="517">517</span> +<span id="518">518</span> +<span id="519">519</span> +<span id="520">520</span> +<span id="521">521</span> +<span id="522">522</span> +<span id="523">523</span> +<span id="524">524</span> +<span id="525">525</span> +<span id="526">526</span> +<span id="527">527</span> +<span id="528">528</span> +<span id="529">529</span> +<span id="530">530</span> +<span id="531">531</span> +<span id="532">532</span> +<span id="533">533</span> +<span id="534">534</span> +<span id="535">535</span> +<span id="536">536</span> +<span id="537">537</span> +<span id="538">538</span> +<span id="539">539</span> +<span id="540">540</span> +<span id="541">541</span> +<span id="542">542</span> +<span id="543">543</span> +<span id="544">544</span> +<span id="545">545</span> +<span id="546">546</span> +<span id="547">547</span> +<span id="548">548</span> +<span id="549">549</span> +<span id="550">550</span> +<span id="551">551</span> +<span id="552">552</span> +<span id="553">553</span> +<span id="554">554</span> +</pre><pre class='rust '> +<span class='doccomment'>//! # Plist</span> +<span class='doccomment'>//!</span> +<span class='doccomment'>//! A rusty plist parser.</span> +<span class='doccomment'>//!</span> +<span class='doccomment'>//! ## Usage</span> +<span class='doccomment'>//!</span> +<span class='doccomment'>//! Put this in your `Cargo.toml`:</span> +<span class='doccomment'>//!</span> +<span class='doccomment'>//! ```toml</span> +<span class='doccomment'>//! [dependencies]</span> +<span class='doccomment'>//! plist = "0.0.12"</span> +<span class='doccomment'>//! ```</span> +<span class='doccomment'>//!</span> +<span class='doccomment'>//! And put this in your crate root:</span> +<span class='doccomment'>//!</span> +<span class='doccomment'>//! ```rust</span> +<span class='doccomment'>//! extern crate plist;</span> +<span class='doccomment'>//! ```</span> +<span class='doccomment'>//!</span> +<span class='doccomment'>//! ## Examples</span> +<span class='doccomment'>//!</span> +<span class='doccomment'>//! ```rust ignore</span> +<span class='doccomment'>//! use plist::Plist;</span> +<span class='doccomment'>//! use std::fs::File;</span> +<span class='doccomment'>//!</span> +<span class='doccomment'>//! let file = File::open("tests/data/xml.plist").unwrap();</span> +<span class='doccomment'>//! let plist = Plist::read(file).unwrap();</span> +<span class='doccomment'>//!</span> +<span class='doccomment'>//! match plist {</span> +<span class='doccomment'>//! Plist::Array(_array) => (),</span> +<span class='doccomment'>//! _ => ()</span> +<span class='doccomment'>//! }</span> +<span class='doccomment'>//!</span> +<span class='doccomment'>//! ```</span> +<span class='doccomment'>//!</span> +<span class='doccomment'>//!</span> + +<span class='kw'>extern</span> <span class='kw'>crate</span> <span class='ident'>byteorder</span>; +<span class='kw'>extern</span> <span class='kw'>crate</span> <span class='ident'>chrono</span>; +<span class='kw'>extern</span> <span class='kw'>crate</span> <span class='ident'>rustc_serialize</span>; +<span class='kw'>extern</span> <span class='kw'>crate</span> <span class='ident'>serde</span>; +<span class='kw'>extern</span> <span class='kw'>crate</span> <span class='ident'>xml</span> <span class='kw'>as</span> <span class='ident'>xml_rs</span>; + +<span class='kw'>pub</span> <span class='kw'>mod</span> <span class='ident'>binary</span>; +<span class='kw'>pub</span> <span class='kw'>mod</span> <span class='ident'>xml</span>; + +<span class='kw'>mod</span> <span class='ident'>builder</span>; +<span class='kw'>mod</span> <span class='ident'>de</span>; +<span class='kw'>mod</span> <span class='ident'>ser</span>; + +<span class='kw'>pub</span> <span class='kw'>use</span> <span class='ident'>de</span>::<span class='ident'>Deserializer</span>; +<span class='kw'>pub</span> <span class='kw'>use</span> <span class='ident'>ser</span>::<span class='ident'>Serializer</span>; + +<span class='kw'>use</span> <span class='ident'>chrono</span>::{<span class='ident'>DateTime</span>, <span class='ident'>UTC</span>}; +<span class='kw'>use</span> <span class='ident'>serde</span>::{<span class='ident'>Deserialize</span>, <span class='ident'>Serialize</span>}; +<span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>collections</span>::<span class='ident'>BTreeMap</span>; +<span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>fmt</span>; +<span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>io</span>::{<span class='ident'>Read</span>, <span class='ident'>Seek</span>, <span class='ident'>SeekFrom</span>, <span class='ident'>Write</span>}; +<span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>io</span>::<span class='ident'>Error</span> <span class='kw'>as</span> <span class='ident'>IoError</span>; + +<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>deserialize</span><span class='op'><</span><span class='ident'>R</span>: <span class='ident'>Read</span> <span class='op'>+</span> <span class='ident'>Seek</span>, <span class='ident'>T</span>: <span class='ident'>Deserialize</span><span class='op'>></span>(<span class='ident'>reader</span>: <span class='ident'>R</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>T</span><span class='op'>></span> { + <span class='kw'>let</span> <span class='ident'>reader</span> <span class='op'>=</span> <span class='ident'>EventReader</span>::<span class='ident'>new</span>(<span class='ident'>reader</span>); + <span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>de</span> <span class='op'>=</span> <span class='ident'>Deserializer</span>::<span class='ident'>new</span>(<span class='ident'>reader</span>); + <span class='ident'>Deserialize</span>::<span class='ident'>deserialize</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='ident'>de</span>) +} + +<span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>serialize_to_xml</span><span class='op'><</span><span class='ident'>W</span>: <span class='ident'>Write</span>, <span class='ident'>T</span>: <span class='ident'>Serialize</span><span class='op'>></span>(<span class='ident'>writer</span>: <span class='ident'>W</span>, <span class='ident'>value</span>: <span class='kw-2'>&</span><span class='ident'>T</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>()<span class='op'>></span> { + <span class='kw'>let</span> <span class='ident'>writer</span> <span class='op'>=</span> <span class='ident'>xml</span>::<span class='ident'>EventWriter</span>::<span class='ident'>new</span>(<span class='ident'>writer</span>); + <span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>ser</span> <span class='op'>=</span> <span class='ident'>Serializer</span>::<span class='ident'>new</span>(<span class='ident'>writer</span>); + <span class='ident'>value</span>.<span class='ident'>serialize</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='ident'>ser</span>) +} + +<span class='attribute'>#[<span class='ident'>derive</span>(<span class='ident'>Clone</span>, <span class='ident'>Debug</span>, <span class='ident'>PartialEq</span>)]</span> +<span class='kw'>pub</span> <span class='kw'>enum</span> <span class='ident'>Plist</span> { + <span class='ident'>Array</span>(<span class='ident'>Vec</span><span class='op'><</span><span class='ident'>Plist</span><span class='op'>></span>), + <span class='ident'>Dictionary</span>(<span class='ident'>BTreeMap</span><span class='op'><</span><span class='ident'>String</span>, <span class='ident'>Plist</span><span class='op'>></span>), + <span class='ident'>Boolean</span>(<span class='ident'>bool</span>), + <span class='ident'>Data</span>(<span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>></span>), + <span class='ident'>Date</span>(<span class='ident'>DateTime</span><span class='op'><</span><span class='ident'>UTC</span><span class='op'>></span>), + <span class='ident'>Real</span>(<span class='ident'>f64</span>), + <span class='ident'>Integer</span>(<span class='ident'>i64</span>), + <span class='ident'>String</span>(<span class='ident'>String</span>), +} + +<span class='kw'>use</span> <span class='ident'>rustc_serialize</span>::<span class='ident'>base64</span>::{<span class='ident'>STANDARD</span>, <span class='ident'>ToBase64</span>}; +<span class='kw'>use</span> <span class='ident'>rustc_serialize</span>::<span class='ident'>json</span>::<span class='ident'>Json</span> <span class='kw'>as</span> <span class='ident'>RustcJson</span>; + +<span class='kw'>impl</span> <span class='ident'>Plist</span> { + <span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>read</span><span class='op'><</span><span class='ident'>R</span>: <span class='ident'>Read</span> <span class='op'>+</span> <span class='ident'>Seek</span><span class='op'>></span>(<span class='ident'>reader</span>: <span class='ident'>R</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>Plist</span><span class='op'>></span> { + <span class='kw'>let</span> <span class='ident'>reader</span> <span class='op'>=</span> <span class='ident'>EventReader</span>::<span class='ident'>new</span>(<span class='ident'>reader</span>); + <span class='ident'>Plist</span>::<span class='ident'>from_events</span>(<span class='ident'>reader</span>) + } + + <span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>from_events</span><span class='op'><</span><span class='ident'>T</span><span class='op'>></span>(<span class='ident'>events</span>: <span class='ident'>T</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>Plist</span><span class='op'>></span> + <span class='kw'>where</span> <span class='ident'>T</span>: <span class='ident'>IntoIterator</span><span class='op'><</span><span class='ident'>Item</span> <span class='op'>=</span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>PlistEvent</span><span class='op'>>></span> + { + <span class='kw'>let</span> <span class='ident'>iter</span> <span class='op'>=</span> <span class='ident'>events</span>.<span class='ident'>into_iter</span>(); + <span class='kw'>let</span> <span class='ident'>builder</span> <span class='op'>=</span> <span class='ident'>builder</span>::<span class='ident'>Builder</span>::<span class='ident'>new</span>(<span class='ident'>iter</span>); + <span class='ident'>builder</span>.<span class='ident'>build</span>() + } + + <span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>into_events</span>(<span class='self'>self</span>) <span class='op'>-></span> <span class='ident'>Vec</span><span class='op'><</span><span class='ident'>PlistEvent</span><span class='op'>></span> { + <span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>events</span> <span class='op'>=</span> <span class='ident'>Vec</span>::<span class='ident'>new</span>(); + <span class='self'>self</span>.<span class='ident'>into_events_inner</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='ident'>events</span>); + <span class='ident'>events</span> + } + + <span class='kw'>fn</span> <span class='ident'>into_events_inner</span>(<span class='self'>self</span>, <span class='ident'>events</span>: <span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='ident'>Vec</span><span class='op'><</span><span class='ident'>PlistEvent</span><span class='op'>></span>) { + <span class='kw'>match</span> <span class='self'>self</span> { + <span class='ident'>Plist</span>::<span class='ident'>Array</span>(<span class='ident'>array</span>) <span class='op'>=></span> { + <span class='ident'>events</span>.<span class='ident'>push</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>StartArray</span>(<span class='prelude-val'>Some</span>(<span class='ident'>array</span>.<span class='ident'>len</span>() <span class='kw'>as</span> <span class='ident'>u64</span>))); + <span class='kw'>for</span> <span class='ident'>value</span> <span class='kw'>in</span> <span class='ident'>array</span>.<span class='ident'>into_iter</span>() { + <span class='ident'>value</span>.<span class='ident'>into_events_inner</span>(<span class='ident'>events</span>); + } + <span class='ident'>events</span>.<span class='ident'>push</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>EndArray</span>); + } + <span class='ident'>Plist</span>::<span class='ident'>Dictionary</span>(<span class='ident'>dict</span>) <span class='op'>=></span> { + <span class='ident'>events</span>.<span class='ident'>push</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>StartDictionary</span>(<span class='prelude-val'>Some</span>(<span class='ident'>dict</span>.<span class='ident'>len</span>() <span class='kw'>as</span> <span class='ident'>u64</span>))); + <span class='kw'>for</span> (<span class='ident'>key</span>, <span class='ident'>value</span>) <span class='kw'>in</span> <span class='ident'>dict</span>.<span class='ident'>into_iter</span>() { + <span class='ident'>events</span>.<span class='ident'>push</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>StringValue</span>(<span class='ident'>key</span>)); + <span class='ident'>value</span>.<span class='ident'>into_events_inner</span>(<span class='ident'>events</span>); + } + <span class='ident'>events</span>.<span class='ident'>push</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>EndDictionary</span>); + } + <span class='ident'>Plist</span>::<span class='ident'>Boolean</span>(<span class='ident'>value</span>) <span class='op'>=></span> <span class='ident'>events</span>.<span class='ident'>push</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>BooleanValue</span>(<span class='ident'>value</span>)), + <span class='ident'>Plist</span>::<span class='ident'>Data</span>(<span class='ident'>value</span>) <span class='op'>=></span> <span class='ident'>events</span>.<span class='ident'>push</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>DataValue</span>(<span class='ident'>value</span>)), + <span class='ident'>Plist</span>::<span class='ident'>Date</span>(<span class='ident'>value</span>) <span class='op'>=></span> <span class='ident'>events</span>.<span class='ident'>push</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>DateValue</span>(<span class='ident'>value</span>)), + <span class='ident'>Plist</span>::<span class='ident'>Real</span>(<span class='ident'>value</span>) <span class='op'>=></span> <span class='ident'>events</span>.<span class='ident'>push</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>RealValue</span>(<span class='ident'>value</span>)), + <span class='ident'>Plist</span>::<span class='ident'>Integer</span>(<span class='ident'>value</span>) <span class='op'>=></span> <span class='ident'>events</span>.<span class='ident'>push</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>IntegerValue</span>(<span class='ident'>value</span>)), + <span class='ident'>Plist</span>::<span class='ident'>String</span>(<span class='ident'>value</span>) <span class='op'>=></span> <span class='ident'>events</span>.<span class='ident'>push</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>StringValue</span>(<span class='ident'>value</span>)), + } + } + + <span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>into_rustc_serialize_json</span>(<span class='self'>self</span>) <span class='op'>-></span> <span class='ident'>RustcJson</span> { + <span class='kw'>match</span> <span class='self'>self</span> { + <span class='ident'>Plist</span>::<span class='ident'>Array</span>(<span class='ident'>value</span>) <span class='op'>=></span> { + <span class='ident'>RustcJson</span>::<span class='ident'>Array</span>(<span class='ident'>value</span>.<span class='ident'>into_iter</span>().<span class='ident'>map</span>(<span class='op'>|</span><span class='ident'>p</span><span class='op'>|</span> <span class='ident'>p</span>.<span class='ident'>into_rustc_serialize_json</span>()).<span class='ident'>collect</span>()) + } + <span class='ident'>Plist</span>::<span class='ident'>Dictionary</span>(<span class='ident'>value</span>) <span class='op'>=></span> { + <span class='ident'>RustcJson</span>::<span class='ident'>Object</span>(<span class='ident'>value</span>.<span class='ident'>into_iter</span>() + .<span class='ident'>map</span>(<span class='op'>|</span>(<span class='ident'>k</span>, <span class='ident'>v</span>)<span class='op'>|</span> (<span class='ident'>k</span>, <span class='ident'>v</span>.<span class='ident'>into_rustc_serialize_json</span>())) + .<span class='ident'>collect</span>()) + } + <span class='ident'>Plist</span>::<span class='ident'>Boolean</span>(<span class='ident'>value</span>) <span class='op'>=></span> <span class='ident'>RustcJson</span>::<span class='ident'>Boolean</span>(<span class='ident'>value</span>), + <span class='ident'>Plist</span>::<span class='ident'>Data</span>(<span class='ident'>value</span>) <span class='op'>=></span> <span class='ident'>RustcJson</span>::<span class='ident'>String</span>(<span class='ident'>value</span>.<span class='ident'>to_base64</span>(<span class='ident'>STANDARD</span>)), + <span class='ident'>Plist</span>::<span class='ident'>Date</span>(<span class='ident'>value</span>) <span class='op'>=></span> <span class='ident'>RustcJson</span>::<span class='ident'>String</span>(<span class='ident'>value</span>.<span class='ident'>to_rfc3339</span>()), + <span class='ident'>Plist</span>::<span class='ident'>Real</span>(<span class='ident'>value</span>) <span class='op'>=></span> <span class='ident'>RustcJson</span>::<span class='ident'>F64</span>(<span class='ident'>value</span>), + <span class='ident'>Plist</span>::<span class='ident'>Integer</span>(<span class='ident'>value</span>) <span class='op'>=></span> <span class='ident'>RustcJson</span>::<span class='ident'>I64</span>(<span class='ident'>value</span>), + <span class='ident'>Plist</span>::<span class='ident'>String</span>(<span class='ident'>value</span>) <span class='op'>=></span> <span class='ident'>RustcJson</span>::<span class='ident'>String</span>(<span class='ident'>value</span>), + } + } +} + +<span class='kw'>impl</span> <span class='ident'>Plist</span> { + <span class='doccomment'>/// If the `Plist` is an Array, returns the associated Vec.</span> + <span class='doccomment'>/// Returns None otherwise.</span> + <span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>as_array</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Option</span><span class='op'><</span><span class='kw-2'>&</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>Plist</span><span class='op'>>></span> { + <span class='kw'>match</span> <span class='self'>self</span> { + <span class='kw-2'>&</span><span class='ident'>Plist</span>::<span class='ident'>Array</span>(<span class='kw-2'>ref</span> <span class='ident'>array</span>) <span class='op'>=></span> <span class='prelude-val'>Some</span>(<span class='ident'>array</span>), + _ <span class='op'>=></span> <span class='prelude-val'>None</span>, + } + } + + <span class='doccomment'>/// If the `Plist` is an Array, returns the associated mutable Vec.</span> + <span class='doccomment'>/// Returns None otherwise.</span> + <span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>as_array_mut</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Option</span><span class='op'><</span><span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='ident'>Vec</span><span class='op'><</span><span class='ident'>Plist</span><span class='op'>>></span> { + <span class='kw'>match</span> <span class='self'>self</span> { + <span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='ident'>Plist</span>::<span class='ident'>Array</span>(<span class='kw-2'>ref</span> <span class='kw-2'>mut</span> <span class='ident'>array</span>) <span class='op'>=></span> <span class='prelude-val'>Some</span>(<span class='ident'>array</span>), + _ <span class='op'>=></span> <span class='prelude-val'>None</span>, + } + } + + <span class='doccomment'>/// If the `Plist` is a Dictionary, returns the associated BTreeMap.</span> + <span class='doccomment'>/// Returns None otherwise.</span> + <span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>as_dictionary</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Option</span><span class='op'><</span><span class='kw-2'>&</span><span class='ident'>BTreeMap</span><span class='op'><</span><span class='ident'>String</span>, <span class='ident'>Plist</span><span class='op'>>></span> { + <span class='kw'>match</span> <span class='self'>self</span> { + <span class='kw-2'>&</span><span class='ident'>Plist</span>::<span class='ident'>Dictionary</span>(<span class='kw-2'>ref</span> <span class='ident'>map</span>) <span class='op'>=></span> <span class='prelude-val'>Some</span>(<span class='ident'>map</span>), + _ <span class='op'>=></span> <span class='prelude-val'>None</span>, + } + } + + <span class='doccomment'>/// If the `Plist` is a Dictionary, returns the associated mutable BTreeMap.</span> + <span class='doccomment'>/// Returns None otherwise.</span> + <span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>as_dictionary_mut</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Option</span><span class='op'><</span><span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='ident'>BTreeMap</span><span class='op'><</span><span class='ident'>String</span>, <span class='ident'>Plist</span><span class='op'>>></span> { + <span class='kw'>match</span> <span class='self'>self</span> { + <span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='ident'>Plist</span>::<span class='ident'>Dictionary</span>(<span class='kw-2'>ref</span> <span class='kw-2'>mut</span> <span class='ident'>map</span>) <span class='op'>=></span> <span class='prelude-val'>Some</span>(<span class='ident'>map</span>), + _ <span class='op'>=></span> <span class='prelude-val'>None</span>, + } + } + + <span class='doccomment'>/// If the `Plist` is a Boolean, returns the associated bool.</span> + <span class='doccomment'>/// Returns None otherwise.</span> + <span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>as_boolean</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>bool</span><span class='op'>></span> { + <span class='kw'>match</span> <span class='self'>self</span> { + <span class='kw-2'>&</span><span class='ident'>Plist</span>::<span class='ident'>Boolean</span>(<span class='ident'>v</span>) <span class='op'>=></span> <span class='prelude-val'>Some</span>(<span class='ident'>v</span>), + _ <span class='op'>=></span> <span class='prelude-val'>None</span>, + } + } + + <span class='doccomment'>/// If the `Plist` is a Data, returns the underlying Vec.</span> + <span class='doccomment'>/// Returns None otherwise.</span> + <span class='doccomment'>///</span> + <span class='doccomment'>/// This method consumes the `Plist`. If this is not desired, please use</span> + <span class='doccomment'>/// `as_data` method.</span> + <span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>into_data</span>(<span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>>></span> { + <span class='kw'>match</span> <span class='self'>self</span> { + <span class='ident'>Plist</span>::<span class='ident'>Data</span>(<span class='ident'>data</span>) <span class='op'>=></span> <span class='prelude-val'>Some</span>(<span class='ident'>data</span>), + _ <span class='op'>=></span> <span class='prelude-val'>None</span>, + } + } + + <span class='doccomment'>/// If the `Plist` is a Data, returns the associated Vec.</span> + <span class='doccomment'>/// Returns None otherwise.</span> + <span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>as_data</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Option</span><span class='op'><</span><span class='kw-2'>&</span>[<span class='ident'>u8</span>]<span class='op'>></span> { + <span class='kw'>match</span> <span class='self'>self</span> { + <span class='kw-2'>&</span><span class='ident'>Plist</span>::<span class='ident'>Data</span>(<span class='kw-2'>ref</span> <span class='ident'>data</span>) <span class='op'>=></span> <span class='prelude-val'>Some</span>(<span class='ident'>data</span>), + _ <span class='op'>=></span> <span class='prelude-val'>None</span>, + } + } + + <span class='doccomment'>/// If the `Plist` is a Date, returns the associated DateTime.</span> + <span class='doccomment'>/// Returns None otherwise.</span> + <span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>as_date</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>DateTime</span><span class='op'><</span><span class='ident'>UTC</span><span class='op'>>></span> { + <span class='kw'>match</span> <span class='self'>self</span> { + <span class='kw-2'>&</span><span class='ident'>Plist</span>::<span class='ident'>Date</span>(<span class='ident'>date</span>) <span class='op'>=></span> <span class='prelude-val'>Some</span>(<span class='ident'>date</span>), + _ <span class='op'>=></span> <span class='prelude-val'>None</span>, + } + } + + <span class='doccomment'>/// If the `Plist` is a Real, returns the associated f64.</span> + <span class='doccomment'>/// Returns None otherwise.</span> + <span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>as_real</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>f64</span><span class='op'>></span> { + <span class='kw'>match</span> <span class='self'>self</span> { + <span class='kw-2'>&</span><span class='ident'>Plist</span>::<span class='ident'>Real</span>(<span class='ident'>v</span>) <span class='op'>=></span> <span class='prelude-val'>Some</span>(<span class='ident'>v</span>), + _ <span class='op'>=></span> <span class='prelude-val'>None</span>, + } + } + + <span class='doccomment'>/// If the `Plist` is an Integer, returns the associated i64.</span> + <span class='doccomment'>/// Returns None otherwise.</span> + <span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>as_integer</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>i64</span><span class='op'>></span> { + <span class='kw'>match</span> <span class='self'>self</span> { + <span class='kw-2'>&</span><span class='ident'>Plist</span>::<span class='ident'>Integer</span>(<span class='ident'>v</span>) <span class='op'>=></span> <span class='prelude-val'>Some</span>(<span class='ident'>v</span>), + _ <span class='op'>=></span> <span class='prelude-val'>None</span>, + } + } + + <span class='doccomment'>/// If the `Plist` is a String, returns the underlying String.</span> + <span class='doccomment'>/// Returns None otherwise.</span> + <span class='doccomment'>///</span> + <span class='doccomment'>/// This method consumes the `Plist`. If this is not desired, please use</span> + <span class='doccomment'>/// `as_string` method.</span> + <span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>into_string</span>(<span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>String</span><span class='op'>></span> { + <span class='kw'>match</span> <span class='self'>self</span> { + <span class='ident'>Plist</span>::<span class='ident'>String</span>(<span class='ident'>v</span>) <span class='op'>=></span> <span class='prelude-val'>Some</span>(<span class='ident'>v</span>), + _ <span class='op'>=></span> <span class='prelude-val'>None</span>, + } + } + + <span class='doccomment'>/// If the `Plist` is a String, returns the associated str.</span> + <span class='doccomment'>/// Returns None otherwise.</span> + <span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>as_string</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Option</span><span class='op'><</span><span class='kw-2'>&</span><span class='ident'>str</span><span class='op'>></span> { + <span class='kw'>match</span> <span class='self'>self</span> { + <span class='kw-2'>&</span><span class='ident'>Plist</span>::<span class='ident'>String</span>(<span class='kw-2'>ref</span> <span class='ident'>v</span>) <span class='op'>=></span> <span class='prelude-val'>Some</span>(<span class='ident'>v</span>), + _ <span class='op'>=></span> <span class='prelude-val'>None</span>, + } + } +} + +<span class='kw'>impl</span> <span class='ident'>From</span><span class='op'><</span><span class='ident'>Vec</span><span class='op'><</span><span class='ident'>Plist</span><span class='op'>>></span> <span class='kw'>for</span> <span class='ident'>Plist</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>from</span>: <span class='ident'>Vec</span><span class='op'><</span><span class='ident'>Plist</span><span class='op'>></span>) <span class='op'>-></span> <span class='ident'>Plist</span> { <span class='ident'>Plist</span>::<span class='ident'>Array</span>(<span class='ident'>from</span>) } +} + +<span class='kw'>impl</span> <span class='ident'>From</span><span class='op'><</span><span class='ident'>BTreeMap</span><span class='op'><</span><span class='ident'>String</span>, <span class='ident'>Plist</span><span class='op'>>></span> <span class='kw'>for</span> <span class='ident'>Plist</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>from</span>: <span class='ident'>BTreeMap</span><span class='op'><</span><span class='ident'>String</span>, <span class='ident'>Plist</span><span class='op'>></span>) <span class='op'>-></span> <span class='ident'>Plist</span> { <span class='ident'>Plist</span>::<span class='ident'>Dictionary</span>(<span class='ident'>from</span>) } +} + +<span class='kw'>impl</span> <span class='ident'>From</span><span class='op'><</span><span class='ident'>bool</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>Plist</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>from</span>: <span class='ident'>bool</span>) <span class='op'>-></span> <span class='ident'>Plist</span> { <span class='ident'>Plist</span>::<span class='ident'>Boolean</span>(<span class='ident'>from</span>) } +} + +<span class='kw'>impl</span><span class='op'><</span><span class='lifetime'>'a</span><span class='op'>></span> <span class='ident'>From</span><span class='op'><</span><span class='kw-2'>&</span><span class='lifetime'>'a</span> <span class='ident'>bool</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>Plist</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>from</span>: <span class='kw-2'>&</span><span class='lifetime'>'a</span> <span class='ident'>bool</span>) <span class='op'>-></span> <span class='ident'>Plist</span> { <span class='ident'>Plist</span>::<span class='ident'>Boolean</span>(<span class='op'>*</span><span class='ident'>from</span>) } +} + +<span class='kw'>impl</span> <span class='ident'>From</span><span class='op'><</span><span class='ident'>DateTime</span><span class='op'><</span><span class='ident'>UTC</span><span class='op'>>></span> <span class='kw'>for</span> <span class='ident'>Plist</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>from</span>: <span class='ident'>DateTime</span><span class='op'><</span><span class='ident'>UTC</span><span class='op'>></span>) <span class='op'>-></span> <span class='ident'>Plist</span> { <span class='ident'>Plist</span>::<span class='ident'>Date</span>(<span class='ident'>from</span>) } +} + +<span class='kw'>impl</span><span class='op'><</span><span class='lifetime'>'a</span><span class='op'>></span> <span class='ident'>From</span><span class='op'><</span><span class='kw-2'>&</span><span class='lifetime'>'a</span> <span class='ident'>DateTime</span><span class='op'><</span><span class='ident'>UTC</span><span class='op'>>></span> <span class='kw'>for</span> <span class='ident'>Plist</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>from</span>: <span class='kw-2'>&</span><span class='lifetime'>'a</span> <span class='ident'>DateTime</span><span class='op'><</span><span class='ident'>UTC</span><span class='op'>></span>) <span class='op'>-></span> <span class='ident'>Plist</span> { <span class='ident'>Plist</span>::<span class='ident'>Date</span>(<span class='ident'>from</span>.<span class='ident'>clone</span>()) } +} + +<span class='kw'>impl</span> <span class='ident'>From</span><span class='op'><</span><span class='ident'>f64</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>Plist</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>from</span>: <span class='ident'>f64</span>) <span class='op'>-></span> <span class='ident'>Plist</span> { <span class='ident'>Plist</span>::<span class='ident'>Real</span>(<span class='ident'>from</span>) } +} + +<span class='kw'>impl</span> <span class='ident'>From</span><span class='op'><</span><span class='ident'>f32</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>Plist</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>from</span>: <span class='ident'>f32</span>) <span class='op'>-></span> <span class='ident'>Plist</span> { <span class='ident'>Plist</span>::<span class='ident'>Real</span>(<span class='ident'>from</span> <span class='kw'>as</span> <span class='ident'>f64</span>) } +} + +<span class='kw'>impl</span> <span class='ident'>From</span><span class='op'><</span><span class='ident'>i64</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>Plist</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>from</span>: <span class='ident'>i64</span>) <span class='op'>-></span> <span class='ident'>Plist</span> { <span class='ident'>Plist</span>::<span class='ident'>Integer</span>(<span class='ident'>from</span>) } +} + +<span class='kw'>impl</span> <span class='ident'>From</span><span class='op'><</span><span class='ident'>i32</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>Plist</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>from</span>: <span class='ident'>i32</span>) <span class='op'>-></span> <span class='ident'>Plist</span> { <span class='ident'>Plist</span>::<span class='ident'>Integer</span>(<span class='ident'>from</span> <span class='kw'>as</span> <span class='ident'>i64</span>) } +} + +<span class='kw'>impl</span> <span class='ident'>From</span><span class='op'><</span><span class='ident'>i16</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>Plist</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>from</span>: <span class='ident'>i16</span>) <span class='op'>-></span> <span class='ident'>Plist</span> { <span class='ident'>Plist</span>::<span class='ident'>Integer</span>(<span class='ident'>from</span> <span class='kw'>as</span> <span class='ident'>i64</span>) } +} + +<span class='kw'>impl</span> <span class='ident'>From</span><span class='op'><</span><span class='ident'>i8</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>Plist</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>from</span>: <span class='ident'>i8</span>) <span class='op'>-></span> <span class='ident'>Plist</span> { <span class='ident'>Plist</span>::<span class='ident'>Integer</span>(<span class='ident'>from</span> <span class='kw'>as</span> <span class='ident'>i64</span>) } +} + +<span class='kw'>impl</span> <span class='ident'>From</span><span class='op'><</span><span class='ident'>u32</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>Plist</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>from</span>: <span class='ident'>u32</span>) <span class='op'>-></span> <span class='ident'>Plist</span> { <span class='ident'>Plist</span>::<span class='ident'>Integer</span>(<span class='ident'>from</span> <span class='kw'>as</span> <span class='ident'>i64</span>) } +} + +<span class='kw'>impl</span> <span class='ident'>From</span><span class='op'><</span><span class='ident'>u16</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>Plist</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>from</span>: <span class='ident'>u16</span>) <span class='op'>-></span> <span class='ident'>Plist</span> { <span class='ident'>Plist</span>::<span class='ident'>Integer</span>(<span class='ident'>from</span> <span class='kw'>as</span> <span class='ident'>i64</span>) } +} + +<span class='kw'>impl</span> <span class='ident'>From</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>Plist</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>from</span>: <span class='ident'>u8</span>) <span class='op'>-></span> <span class='ident'>Plist</span> { <span class='ident'>Plist</span>::<span class='ident'>Integer</span>(<span class='ident'>from</span> <span class='kw'>as</span> <span class='ident'>i64</span>) } +} + +<span class='kw'>impl</span><span class='op'><</span><span class='lifetime'>'a</span><span class='op'>></span> <span class='ident'>From</span><span class='op'><</span><span class='kw-2'>&</span><span class='lifetime'>'a</span> <span class='ident'>f64</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>Plist</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>from</span>: <span class='kw-2'>&</span><span class='lifetime'>'a</span> <span class='ident'>f64</span>) <span class='op'>-></span> <span class='ident'>Plist</span> { <span class='ident'>Plist</span>::<span class='ident'>Real</span>(<span class='op'>*</span><span class='ident'>from</span>) } +} + +<span class='kw'>impl</span><span class='op'><</span><span class='lifetime'>'a</span><span class='op'>></span> <span class='ident'>From</span><span class='op'><</span><span class='kw-2'>&</span><span class='lifetime'>'a</span> <span class='ident'>f32</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>Plist</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>from</span>: <span class='kw-2'>&</span><span class='lifetime'>'a</span> <span class='ident'>f32</span>) <span class='op'>-></span> <span class='ident'>Plist</span> { <span class='ident'>Plist</span>::<span class='ident'>Real</span>(<span class='op'>*</span><span class='ident'>from</span> <span class='kw'>as</span> <span class='ident'>f64</span>) } +} + +<span class='kw'>impl</span><span class='op'><</span><span class='lifetime'>'a</span><span class='op'>></span> <span class='ident'>From</span><span class='op'><</span><span class='kw-2'>&</span><span class='lifetime'>'a</span> <span class='ident'>i64</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>Plist</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>from</span>: <span class='kw-2'>&</span><span class='lifetime'>'a</span> <span class='ident'>i64</span>) <span class='op'>-></span> <span class='ident'>Plist</span> { <span class='ident'>Plist</span>::<span class='ident'>Integer</span>(<span class='op'>*</span><span class='ident'>from</span>) } +} + +<span class='kw'>impl</span><span class='op'><</span><span class='lifetime'>'a</span><span class='op'>></span> <span class='ident'>From</span><span class='op'><</span><span class='kw-2'>&</span><span class='lifetime'>'a</span> <span class='ident'>i32</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>Plist</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>from</span>: <span class='kw-2'>&</span><span class='lifetime'>'a</span> <span class='ident'>i32</span>) <span class='op'>-></span> <span class='ident'>Plist</span> { <span class='ident'>Plist</span>::<span class='ident'>Integer</span>(<span class='op'>*</span><span class='ident'>from</span> <span class='kw'>as</span> <span class='ident'>i64</span>) } +} + +<span class='kw'>impl</span><span class='op'><</span><span class='lifetime'>'a</span><span class='op'>></span> <span class='ident'>From</span><span class='op'><</span><span class='kw-2'>&</span><span class='lifetime'>'a</span> <span class='ident'>i16</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>Plist</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>from</span>: <span class='kw-2'>&</span><span class='lifetime'>'a</span> <span class='ident'>i16</span>) <span class='op'>-></span> <span class='ident'>Plist</span> { <span class='ident'>Plist</span>::<span class='ident'>Integer</span>(<span class='op'>*</span><span class='ident'>from</span> <span class='kw'>as</span> <span class='ident'>i64</span>) } +} + +<span class='kw'>impl</span><span class='op'><</span><span class='lifetime'>'a</span><span class='op'>></span> <span class='ident'>From</span><span class='op'><</span><span class='kw-2'>&</span><span class='lifetime'>'a</span> <span class='ident'>i8</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>Plist</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>from</span>: <span class='kw-2'>&</span><span class='lifetime'>'a</span> <span class='ident'>i8</span>) <span class='op'>-></span> <span class='ident'>Plist</span> { <span class='ident'>Plist</span>::<span class='ident'>Integer</span>(<span class='op'>*</span><span class='ident'>from</span> <span class='kw'>as</span> <span class='ident'>i64</span>) } +} + +<span class='kw'>impl</span><span class='op'><</span><span class='lifetime'>'a</span><span class='op'>></span> <span class='ident'>From</span><span class='op'><</span><span class='kw-2'>&</span><span class='lifetime'>'a</span> <span class='ident'>u32</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>Plist</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>from</span>: <span class='kw-2'>&</span><span class='lifetime'>'a</span> <span class='ident'>u32</span>) <span class='op'>-></span> <span class='ident'>Plist</span> { <span class='ident'>Plist</span>::<span class='ident'>Integer</span>(<span class='op'>*</span><span class='ident'>from</span> <span class='kw'>as</span> <span class='ident'>i64</span>) } +} + +<span class='kw'>impl</span><span class='op'><</span><span class='lifetime'>'a</span><span class='op'>></span> <span class='ident'>From</span><span class='op'><</span><span class='kw-2'>&</span><span class='lifetime'>'a</span> <span class='ident'>u16</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>Plist</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>from</span>: <span class='kw-2'>&</span><span class='lifetime'>'a</span> <span class='ident'>u16</span>) <span class='op'>-></span> <span class='ident'>Plist</span> { <span class='ident'>Plist</span>::<span class='ident'>Integer</span>(<span class='op'>*</span><span class='ident'>from</span> <span class='kw'>as</span> <span class='ident'>i64</span>) } +} + +<span class='kw'>impl</span><span class='op'><</span><span class='lifetime'>'a</span><span class='op'>></span> <span class='ident'>From</span><span class='op'><</span><span class='kw-2'>&</span><span class='lifetime'>'a</span> <span class='ident'>u8</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>Plist</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>from</span>: <span class='kw-2'>&</span><span class='lifetime'>'a</span> <span class='ident'>u8</span>) <span class='op'>-></span> <span class='ident'>Plist</span> { <span class='ident'>Plist</span>::<span class='ident'>Integer</span>(<span class='op'>*</span><span class='ident'>from</span> <span class='kw'>as</span> <span class='ident'>i64</span>) } +} + +<span class='kw'>impl</span> <span class='ident'>From</span><span class='op'><</span><span class='ident'>String</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>Plist</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>from</span>: <span class='ident'>String</span>) <span class='op'>-></span> <span class='ident'>Plist</span> { <span class='ident'>Plist</span>::<span class='ident'>String</span>(<span class='ident'>from</span>) } +} + +<span class='kw'>impl</span><span class='op'><</span><span class='lifetime'>'a</span><span class='op'>></span> <span class='ident'>From</span><span class='op'><</span><span class='kw-2'>&</span><span class='lifetime'>'a</span> <span class='ident'>str</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>Plist</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>from</span>: <span class='kw-2'>&</span><span class='lifetime'>'a</span> <span class='ident'>str</span>) <span class='op'>-></span> <span class='ident'>Plist</span> { <span class='ident'>Plist</span>::<span class='ident'>String</span>(<span class='ident'>from</span>.<span class='ident'>into</span>()) } +} + +<span class='doccomment'>/// An encoding of a plist as a flat structure.</span> +<span class='doccomment'>///</span> +<span class='doccomment'>/// Output by the event readers.</span> +<span class='doccomment'>///</span> +<span class='doccomment'>/// Dictionary keys and values are represented as pairs of values e.g.:</span> +<span class='doccomment'>///</span> +<span class='doccomment'>/// ```ignore rust</span> +<span class='doccomment'>/// StartDictionary</span> +<span class='doccomment'>/// StringValue("Height") // Key</span> +<span class='doccomment'>/// RealValue(181.2) // Value</span> +<span class='doccomment'>/// StringValue("Age") // Key</span> +<span class='doccomment'>/// IntegerValue(28) // Value</span> +<span class='doccomment'>/// EndDictionary</span> +<span class='doccomment'>/// ```</span> +<span class='attribute'>#[<span class='ident'>derive</span>(<span class='ident'>Clone</span>, <span class='ident'>Debug</span>, <span class='ident'>PartialEq</span>)]</span> +<span class='kw'>pub</span> <span class='kw'>enum</span> <span class='ident'>PlistEvent</span> { + <span class='comment'>// While the length of an array or dict cannot be feasably greater than max(usize) this better</span> + <span class='comment'>// conveys the concept of an effectively unbounded event stream.</span> + <span class='ident'>StartArray</span>(<span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>u64</span><span class='op'>></span>), + <span class='ident'>EndArray</span>, + + <span class='ident'>StartDictionary</span>(<span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>u64</span><span class='op'>></span>), + <span class='ident'>EndDictionary</span>, + + <span class='ident'>BooleanValue</span>(<span class='ident'>bool</span>), + <span class='ident'>DataValue</span>(<span class='ident'>Vec</span><span class='op'><</span><span class='ident'>u8</span><span class='op'>></span>), + <span class='ident'>DateValue</span>(<span class='ident'>DateTime</span><span class='op'><</span><span class='ident'>UTC</span><span class='op'>></span>), + <span class='ident'>IntegerValue</span>(<span class='ident'>i64</span>), + <span class='ident'>RealValue</span>(<span class='ident'>f64</span>), + <span class='ident'>StringValue</span>(<span class='ident'>String</span>), +} + +<span class='kw'>pub</span> <span class='kw'>type</span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>T</span><span class='op'>></span> <span class='op'>=</span> ::<span class='ident'>std</span>::<span class='ident'>result</span>::<span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>T</span>, <span class='ident'>Error</span><span class='op'>></span>; + +<span class='attribute'>#[<span class='ident'>derive</span>(<span class='ident'>Debug</span>)]</span> +<span class='kw'>pub</span> <span class='kw'>enum</span> <span class='ident'>Error</span> { + <span class='ident'>InvalidData</span>, + <span class='ident'>UnexpectedEof</span>, + <span class='ident'>Io</span>(<span class='ident'>IoError</span>), + <span class='ident'>Serde</span>(<span class='ident'>String</span>) +} + +<span class='kw'>impl</span> ::<span class='ident'>std</span>::<span class='ident'>error</span>::<span class='ident'>Error</span> <span class='kw'>for</span> <span class='ident'>Error</span> { + <span class='kw'>fn</span> <span class='ident'>description</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> <span class='kw-2'>&</span><span class='ident'>str</span> { + <span class='kw'>match</span> <span class='op'>*</span><span class='self'>self</span> { + <span class='ident'>Error</span>::<span class='ident'>InvalidData</span> <span class='op'>=></span> <span class='string'>"invalid data"</span>, + <span class='ident'>Error</span>::<span class='ident'>UnexpectedEof</span> <span class='op'>=></span> <span class='string'>"unexpected eof"</span>, + <span class='ident'>Error</span>::<span class='ident'>Io</span>(<span class='kw-2'>ref</span> <span class='ident'>err</span>) <span class='op'>=></span> <span class='ident'>err</span>.<span class='ident'>description</span>(), + <span class='ident'>Error</span>::<span class='ident'>Serde</span>(<span class='kw-2'>ref</span> <span class='ident'>err</span>) <span class='op'>=></span> <span class='kw-2'>&</span><span class='ident'>err</span> + } + } + + <span class='kw'>fn</span> <span class='ident'>cause</span>(<span class='kw-2'>&</span><span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Option</span><span class='op'><</span><span class='kw-2'>&</span>::<span class='ident'>std</span>::<span class='ident'>error</span>::<span class='ident'>Error</span><span class='op'>></span> { + <span class='kw'>match</span> <span class='op'>*</span><span class='self'>self</span> { + <span class='ident'>Error</span>::<span class='ident'>Io</span>(<span class='kw-2'>ref</span> <span class='ident'>err</span>) <span class='op'>=></span> <span class='prelude-val'>Some</span>(<span class='ident'>err</span>), + _ <span class='op'>=></span> <span class='prelude-val'>None</span>, + } + } +} + +<span class='kw'>impl</span> <span class='ident'>fmt</span>::<span class='ident'>Display</span> <span class='kw'>for</span> <span class='ident'>Error</span> { + <span class='kw'>fn</span> <span class='ident'>fmt</span>(<span class='kw-2'>&</span><span class='self'>self</span>, <span class='ident'>fmt</span>: <span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='ident'>fmt</span>::<span class='ident'>Formatter</span>) <span class='op'>-></span> <span class='ident'>fmt</span>::<span class='prelude-ty'>Result</span> { + <span class='kw'>match</span> <span class='op'>*</span><span class='self'>self</span> { + <span class='ident'>Error</span>::<span class='ident'>Io</span>(<span class='kw-2'>ref</span> <span class='ident'>err</span>) <span class='op'>=></span> <span class='ident'>err</span>.<span class='ident'>fmt</span>(<span class='ident'>fmt</span>), + _ <span class='op'>=></span> <span class='op'><</span><span class='self'>Self</span> <span class='kw'>as</span> ::<span class='ident'>std</span>::<span class='ident'>error</span>::<span class='ident'>Error</span><span class='op'>></span>::<span class='ident'>description</span>(<span class='self'>self</span>).<span class='ident'>fmt</span>(<span class='ident'>fmt</span>), + } + } +} + +<span class='kw'>impl</span> <span class='ident'>From</span><span class='op'><</span><span class='ident'>IoError</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>Error</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>err</span>: <span class='ident'>IoError</span>) <span class='op'>-></span> <span class='ident'>Error</span> { + <span class='ident'>Error</span>::<span class='ident'>Io</span>(<span class='ident'>err</span>) + } +} + +<span class='kw'>pub</span> <span class='kw'>struct</span> <span class='ident'>EventReader</span><span class='op'><</span><span class='ident'>R</span>: <span class='ident'>Read</span> <span class='op'>+</span> <span class='ident'>Seek</span><span class='op'>></span>(<span class='ident'>EventReaderInner</span><span class='op'><</span><span class='ident'>R</span><span class='op'>></span>); + +<span class='kw'>enum</span> <span class='ident'>EventReaderInner</span><span class='op'><</span><span class='ident'>R</span>: <span class='ident'>Read</span> <span class='op'>+</span> <span class='ident'>Seek</span><span class='op'>></span> { + <span class='ident'>Uninitialized</span>(<span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>R</span><span class='op'>></span>), + <span class='ident'>Xml</span>(<span class='ident'>xml</span>::<span class='ident'>EventReader</span><span class='op'><</span><span class='ident'>R</span><span class='op'>></span>), + <span class='ident'>Binary</span>(<span class='ident'>binary</span>::<span class='ident'>EventReader</span><span class='op'><</span><span class='ident'>R</span><span class='op'>></span>), +} + +<span class='kw'>impl</span><span class='op'><</span><span class='ident'>R</span>: <span class='ident'>Read</span> <span class='op'>+</span> <span class='ident'>Seek</span><span class='op'>></span> <span class='ident'>EventReader</span><span class='op'><</span><span class='ident'>R</span><span class='op'>></span> { + <span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>new</span>(<span class='ident'>reader</span>: <span class='ident'>R</span>) <span class='op'>-></span> <span class='ident'>EventReader</span><span class='op'><</span><span class='ident'>R</span><span class='op'>></span> { + <span class='ident'>EventReader</span>(<span class='ident'>EventReaderInner</span>::<span class='ident'>Uninitialized</span>(<span class='prelude-val'>Some</span>(<span class='ident'>reader</span>))) + } + + <span class='kw'>fn</span> <span class='ident'>is_binary</span>(<span class='ident'>reader</span>: <span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='ident'>R</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>bool</span><span class='op'>></span> { + <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>reader</span>.<span class='ident'>seek</span>(<span class='ident'>SeekFrom</span>::<span class='ident'>Start</span>(<span class='number'>0</span>))); + <span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>magic</span> <span class='op'>=</span> [<span class='number'>0</span>; <span class='number'>8</span>]; + <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>reader</span>.<span class='ident'>read</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='ident'>magic</span>)); + <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>reader</span>.<span class='ident'>seek</span>(<span class='ident'>SeekFrom</span>::<span class='ident'>Start</span>(<span class='number'>0</span>))); + + <span class='prelude-val'>Ok</span>(<span class='kw'>if</span> <span class='kw-2'>&</span><span class='ident'>magic</span> <span class='op'>==</span> <span class='string'>b"bplist00"</span> { + <span class='bool-val'>true</span> + } <span class='kw'>else</span> { + <span class='bool-val'>false</span> + }) + } +} + +<span class='kw'>impl</span><span class='op'><</span><span class='ident'>R</span>: <span class='ident'>Read</span> <span class='op'>+</span> <span class='ident'>Seek</span><span class='op'>></span> <span class='ident'>Iterator</span> <span class='kw'>for</span> <span class='ident'>EventReader</span><span class='op'><</span><span class='ident'>R</span><span class='op'>></span> { + <span class='kw'>type</span> <span class='ident'>Item</span> <span class='op'>=</span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>PlistEvent</span><span class='op'>></span>; + + <span class='kw'>fn</span> <span class='ident'>next</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Option</span><span class='op'><</span><span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>PlistEvent</span><span class='op'>>></span> { + <span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>reader</span> <span class='op'>=</span> <span class='kw'>match</span> <span class='self'>self</span>.<span class='number'>0</span> { + <span class='ident'>EventReaderInner</span>::<span class='ident'>Xml</span>(<span class='kw-2'>ref</span> <span class='kw-2'>mut</span> <span class='ident'>parser</span>) <span class='op'>=></span> <span class='kw'>return</span> <span class='ident'>parser</span>.<span class='ident'>next</span>(), + <span class='ident'>EventReaderInner</span>::<span class='ident'>Binary</span>(<span class='kw-2'>ref</span> <span class='kw-2'>mut</span> <span class='ident'>parser</span>) <span class='op'>=></span> <span class='kw'>return</span> <span class='ident'>parser</span>.<span class='ident'>next</span>(), + <span class='ident'>EventReaderInner</span>::<span class='ident'>Uninitialized</span>(<span class='kw-2'>ref</span> <span class='kw-2'>mut</span> <span class='ident'>reader</span>) <span class='op'>=></span> <span class='ident'>reader</span>.<span class='ident'>take</span>().<span class='ident'>unwrap</span>(), + }; + + <span class='kw'>let</span> <span class='ident'>event_reader</span> <span class='op'>=</span> <span class='kw'>match</span> <span class='ident'>EventReader</span>::<span class='ident'>is_binary</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='ident'>reader</span>) { + <span class='prelude-val'>Ok</span>(<span class='bool-val'>true</span>) <span class='op'>=></span> <span class='ident'>EventReaderInner</span>::<span class='ident'>Binary</span>(<span class='ident'>binary</span>::<span class='ident'>EventReader</span>::<span class='ident'>new</span>(<span class='ident'>reader</span>)), + <span class='prelude-val'>Ok</span>(<span class='bool-val'>false</span>) <span class='op'>=></span> <span class='ident'>EventReaderInner</span>::<span class='ident'>Xml</span>(<span class='ident'>xml</span>::<span class='ident'>EventReader</span>::<span class='ident'>new</span>(<span class='ident'>reader</span>)), + <span class='prelude-val'>Err</span>(<span class='ident'>err</span>) <span class='op'>=></span> { + ::<span class='ident'>std</span>::<span class='ident'>mem</span>::<span class='ident'>replace</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>.<span class='number'>0</span>, <span class='ident'>EventReaderInner</span>::<span class='ident'>Uninitialized</span>(<span class='prelude-val'>Some</span>(<span class='ident'>reader</span>))); + <span class='kw'>return</span> <span class='prelude-val'>Some</span>(<span class='prelude-val'>Err</span>(<span class='ident'>err</span>)); + } + }; + + ::<span class='ident'>std</span>::<span class='ident'>mem</span>::<span class='ident'>replace</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>.<span class='number'>0</span>, <span class='ident'>event_reader</span>); + + <span class='self'>self</span>.<span class='ident'>next</span>() + } +} + +<span class='kw'>pub</span> <span class='kw'>trait</span> <span class='ident'>EventWriter</span> { + <span class='kw'>fn</span> <span class='ident'>write</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>event</span>: <span class='kw-2'>&</span><span class='ident'>PlistEvent</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>()<span class='op'>></span>; +} + +<span class='kw'>fn</span> <span class='ident'>u64_to_usize</span>(<span class='ident'>len_u64</span>: <span class='ident'>u64</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>usize</span><span class='op'>></span> { + <span class='kw'>let</span> <span class='ident'>len</span> <span class='op'>=</span> <span class='ident'>len_u64</span> <span class='kw'>as</span> <span class='ident'>usize</span>; + <span class='kw'>if</span> <span class='ident'>len</span> <span class='kw'>as</span> <span class='ident'>u64</span> <span class='op'>!=</span> <span class='ident'>len_u64</span> { + <span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>InvalidData</span>); <span class='comment'>// Too long</span> + } + <span class='prelude-val'>Ok</span>(<span class='ident'>len</span>) +} + +<span class='kw'>fn</span> <span class='ident'>u64_option_to_usize</span>(<span class='ident'>len</span>: <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>u64</span><span class='op'>></span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>usize</span><span class='op'>>></span> { + <span class='kw'>match</span> <span class='ident'>len</span> { + <span class='prelude-val'>Some</span>(<span class='ident'>len</span>) <span class='op'>=></span> <span class='prelude-val'>Ok</span>(<span class='prelude-val'>Some</span>(<span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>u64_to_usize</span>(<span class='ident'>len</span>)))), + <span class='prelude-val'>None</span> <span class='op'>=></span> <span class='prelude-val'>Ok</span>(<span class='prelude-val'>None</span>), + } +} + +<span class='attribute'>#[<span class='ident'>cfg</span>(<span class='ident'>test</span>)]</span> +<span class='kw'>mod</span> <span class='ident'>tests</span> { + <span class='kw'>use</span> <span class='kw'>super</span>::<span class='ident'>Plist</span>; + + <span class='attribute'>#[<span class='ident'>test</span>]</span> + <span class='kw'>fn</span> <span class='ident'>test_plist_access</span>() { + <span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>collections</span>::<span class='ident'>BTreeMap</span>; + <span class='kw'>use</span> <span class='ident'>chrono</span>::<span class='op'>*</span>; + + <span class='kw'>let</span> <span class='ident'>vec</span> <span class='op'>=</span> <span class='macro'>vec</span><span class='macro'>!</span>[<span class='ident'>Plist</span>::<span class='ident'>Real</span>(<span class='number'>0.0</span>)]; + <span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>array</span> <span class='op'>=</span> <span class='ident'>Plist</span>::<span class='ident'>Array</span>(<span class='ident'>vec</span>.<span class='ident'>clone</span>()); + <span class='macro'>assert_eq</span><span class='macro'>!</span>(<span class='ident'>array</span>.<span class='ident'>as_array</span>(), <span class='prelude-val'>Some</span>(<span class='kw-2'>&</span><span class='ident'>vec</span>.<span class='ident'>clone</span>())); + <span class='macro'>assert_eq</span><span class='macro'>!</span>(<span class='ident'>array</span>.<span class='ident'>as_array_mut</span>(), <span class='prelude-val'>Some</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='ident'>vec</span>.<span class='ident'>clone</span>())); + + <span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>map</span> <span class='op'>=</span> <span class='ident'>BTreeMap</span>::<span class='ident'>new</span>(); + <span class='ident'>map</span>.<span class='ident'>insert</span>(<span class='string'>"key1"</span>.<span class='ident'>to_owned</span>(), <span class='ident'>Plist</span>::<span class='ident'>String</span>(<span class='string'>"value1"</span>.<span class='ident'>to_owned</span>())); + <span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>dict</span> <span class='op'>=</span> <span class='ident'>Plist</span>::<span class='ident'>Dictionary</span>(<span class='ident'>map</span>.<span class='ident'>clone</span>()); + <span class='macro'>assert_eq</span><span class='macro'>!</span>(<span class='ident'>dict</span>.<span class='ident'>as_dictionary</span>(), <span class='prelude-val'>Some</span>(<span class='kw-2'>&</span><span class='ident'>map</span>.<span class='ident'>clone</span>())); + <span class='macro'>assert_eq</span><span class='macro'>!</span>(<span class='ident'>dict</span>.<span class='ident'>as_dictionary_mut</span>(), <span class='prelude-val'>Some</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='ident'>map</span>.<span class='ident'>clone</span>())); + + <span class='macro'>assert_eq</span><span class='macro'>!</span>(<span class='ident'>Plist</span>::<span class='ident'>Boolean</span>(<span class='bool-val'>true</span>).<span class='ident'>as_boolean</span>(), <span class='prelude-val'>Some</span>(<span class='bool-val'>true</span>)); + + <span class='kw'>let</span> <span class='ident'>slice</span>: <span class='kw-2'>&</span>[<span class='ident'>u8</span>] <span class='op'>=</span> <span class='kw-2'>&</span>[<span class='number'>1</span>, <span class='number'>2</span>, <span class='number'>3</span>]; + <span class='macro'>assert_eq</span><span class='macro'>!</span>(<span class='ident'>Plist</span>::<span class='ident'>Data</span>(<span class='ident'>slice</span>.<span class='ident'>to_vec</span>()).<span class='ident'>as_data</span>(), <span class='prelude-val'>Some</span>(<span class='ident'>slice</span>)); + <span class='macro'>assert_eq</span><span class='macro'>!</span>(<span class='ident'>Plist</span>::<span class='ident'>Data</span>(<span class='ident'>slice</span>.<span class='ident'>to_vec</span>()).<span class='ident'>into_data</span>(), <span class='prelude-val'>Some</span>(<span class='ident'>slice</span>.<span class='ident'>to_vec</span>())); + + <span class='kw'>let</span> <span class='ident'>date</span>: <span class='ident'>DateTime</span><span class='op'><</span><span class='ident'>UTC</span><span class='op'>></span> <span class='op'>=</span> <span class='ident'>UTC</span>::<span class='ident'>now</span>(); + <span class='macro'>assert_eq</span><span class='macro'>!</span>(<span class='ident'>Plist</span>::<span class='ident'>Date</span>(<span class='ident'>date</span>).<span class='ident'>as_date</span>(), <span class='prelude-val'>Some</span>(<span class='ident'>date</span>)); + + <span class='macro'>assert_eq</span><span class='macro'>!</span>(<span class='ident'>Plist</span>::<span class='ident'>Real</span>(<span class='number'>0.0</span>).<span class='ident'>as_real</span>(), <span class='prelude-val'>Some</span>(<span class='number'>0.0</span>)); + <span class='macro'>assert_eq</span><span class='macro'>!</span>(<span class='ident'>Plist</span>::<span class='ident'>Integer</span>(<span class='number'>1</span>).<span class='ident'>as_integer</span>(), <span class='prelude-val'>Some</span>(<span class='number'>1</span>)); + <span class='macro'>assert_eq</span><span class='macro'>!</span>(<span class='ident'>Plist</span>::<span class='ident'>String</span>(<span class='string'>"2"</span>.<span class='ident'>to_owned</span>()).<span class='ident'>as_string</span>(), <span class='prelude-val'>Some</span>(<span class='string'>"2"</span>)); + <span class='macro'>assert_eq</span><span class='macro'>!</span>(<span class='ident'>Plist</span>::<span class='ident'>String</span>(<span class='string'>"t"</span>.<span class='ident'>to_owned</span>()).<span class='ident'>into_string</span>(), <span class='prelude-val'>Some</span>(<span class='string'>"t"</span>.<span class='ident'>to_owned</span>())); + } +} +</pre> +</section> + <section id='search' class="content hidden"></section> + + <section class="footer"></section> + + <aside id="help" class="hidden"> + <div> + <h1 class="hidden">Help</h1> + + <div class="shortcuts"> + <h2>Keyboard Shortcuts</h2> + + <dl> + <dt>?</dt> + <dd>Show this help dialog</dd> + <dt>S</dt> + <dd>Focus the search field</dd> + <dt>⇤</dt> + <dd>Move up in search results</dd> + <dt>⇥</dt> + <dd>Move down in search results</dd> + <dt>⏎</dt> + <dd>Go to active search result</dd> + <dt>+</dt> + <dd>Collapse/expand all sections</dd> + </dl> + </div> + + <div class="infos"> + <h2>Search Tricks</h2> + + <p> + Prefix searches with a type followed by a colon (e.g. + <code>fn:</code>) to restrict the search to a given type. + </p> + + <p> + Accepted types are: <code>fn</code>, <code>mod</code>, + <code>struct</code>, <code>enum</code>, + <code>trait</code>, <code>type</code>, <code>macro</code>, + and <code>const</code>. + </p> + + <p> + Search functions by type signature (e.g. + <code>vec -> usize</code> or <code>* -> vec</code>) + </p> + </div> + </div> + </aside> + + + + <script> + window.rootPath = "../../../"; + window.currentCrate = "plist"; + </script> + <script src="../../../jquery.js"></script> + <script src="../../../main.js"></script> + <script defer src="../../../search-index.js"></script> +</body> +</html>
\ No newline at end of file diff --git a/src/plist/src/ser.rs.html b/src/plist/src/ser.rs.html new file mode 100644 index 0000000..2bded7a --- /dev/null +++ b/src/plist/src/ser.rs.html @@ -0,0 +1,480 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="generator" content="rustdoc"> + <meta name="description" content="Source to the Rust file `src/ser.rs`."> + <meta name="keywords" content="rust, rustlang, rust-lang"> + + <title>ser.rs.html -- source</title> + + <link rel="stylesheet" type="text/css" href="../../../rustdoc.css"> + <link rel="stylesheet" type="text/css" href="../../../main.css"> + + + + +</head> +<body class="rustdoc"> + <!--[if lte IE 8]> + <div class="warning"> + This old browser is unsupported and will most likely display funky + things. + </div> + <![endif]--> + + + + <nav class="sidebar"> + + + </nav> + + <nav class="sub"> + <form class="search-form js-only"> + <div class="search-container"> + <input class="search-input" name="search" + autocomplete="off" + placeholder="Click or press ‘S’ to search, ‘?’ for more options…" + type="search"> + </div> + </form> + </nav> + + <section id='main' class="content source"><pre class="line-numbers"><span id="1"> 1</span> +<span id="2"> 2</span> +<span id="3"> 3</span> +<span id="4"> 4</span> +<span id="5"> 5</span> +<span id="6"> 6</span> +<span id="7"> 7</span> +<span id="8"> 8</span> +<span id="9"> 9</span> +<span id="10"> 10</span> +<span id="11"> 11</span> +<span id="12"> 12</span> +<span id="13"> 13</span> +<span id="14"> 14</span> +<span id="15"> 15</span> +<span id="16"> 16</span> +<span id="17"> 17</span> +<span id="18"> 18</span> +<span id="19"> 19</span> +<span id="20"> 20</span> +<span id="21"> 21</span> +<span id="22"> 22</span> +<span id="23"> 23</span> +<span id="24"> 24</span> +<span id="25"> 25</span> +<span id="26"> 26</span> +<span id="27"> 27</span> +<span id="28"> 28</span> +<span id="29"> 29</span> +<span id="30"> 30</span> +<span id="31"> 31</span> +<span id="32"> 32</span> +<span id="33"> 33</span> +<span id="34"> 34</span> +<span id="35"> 35</span> +<span id="36"> 36</span> +<span id="37"> 37</span> +<span id="38"> 38</span> +<span id="39"> 39</span> +<span id="40"> 40</span> +<span id="41"> 41</span> +<span id="42"> 42</span> +<span id="43"> 43</span> +<span id="44"> 44</span> +<span id="45"> 45</span> +<span id="46"> 46</span> +<span id="47"> 47</span> +<span id="48"> 48</span> +<span id="49"> 49</span> +<span id="50"> 50</span> +<span id="51"> 51</span> +<span id="52"> 52</span> +<span id="53"> 53</span> +<span id="54"> 54</span> +<span id="55"> 55</span> +<span id="56"> 56</span> +<span id="57"> 57</span> +<span id="58"> 58</span> +<span id="59"> 59</span> +<span id="60"> 60</span> +<span id="61"> 61</span> +<span id="62"> 62</span> +<span id="63"> 63</span> +<span id="64"> 64</span> +<span id="65"> 65</span> +<span id="66"> 66</span> +<span id="67"> 67</span> +<span id="68"> 68</span> +<span id="69"> 69</span> +<span id="70"> 70</span> +<span id="71"> 71</span> +<span id="72"> 72</span> +<span id="73"> 73</span> +<span id="74"> 74</span> +<span id="75"> 75</span> +<span id="76"> 76</span> +<span id="77"> 77</span> +<span id="78"> 78</span> +<span id="79"> 79</span> +<span id="80"> 80</span> +<span id="81"> 81</span> +<span id="82"> 82</span> +<span id="83"> 83</span> +<span id="84"> 84</span> +<span id="85"> 85</span> +<span id="86"> 86</span> +<span id="87"> 87</span> +<span id="88"> 88</span> +<span id="89"> 89</span> +<span id="90"> 90</span> +<span id="91"> 91</span> +<span id="92"> 92</span> +<span id="93"> 93</span> +<span id="94"> 94</span> +<span id="95"> 95</span> +<span id="96"> 96</span> +<span id="97"> 97</span> +<span id="98"> 98</span> +<span id="99"> 99</span> +<span id="100">100</span> +<span id="101">101</span> +<span id="102">102</span> +<span id="103">103</span> +<span id="104">104</span> +<span id="105">105</span> +<span id="106">106</span> +<span id="107">107</span> +<span id="108">108</span> +<span id="109">109</span> +<span id="110">110</span> +<span id="111">111</span> +<span id="112">112</span> +<span id="113">113</span> +<span id="114">114</span> +<span id="115">115</span> +<span id="116">116</span> +<span id="117">117</span> +<span id="118">118</span> +<span id="119">119</span> +<span id="120">120</span> +<span id="121">121</span> +<span id="122">122</span> +<span id="123">123</span> +<span id="124">124</span> +<span id="125">125</span> +<span id="126">126</span> +<span id="127">127</span> +<span id="128">128</span> +<span id="129">129</span> +<span id="130">130</span> +<span id="131">131</span> +<span id="132">132</span> +<span id="133">133</span> +<span id="134">134</span> +<span id="135">135</span> +<span id="136">136</span> +<span id="137">137</span> +<span id="138">138</span> +<span id="139">139</span> +<span id="140">140</span> +<span id="141">141</span> +<span id="142">142</span> +<span id="143">143</span> +<span id="144">144</span> +<span id="145">145</span> +<span id="146">146</span> +<span id="147">147</span> +<span id="148">148</span> +<span id="149">149</span> +<span id="150">150</span> +<span id="151">151</span> +<span id="152">152</span> +<span id="153">153</span> +<span id="154">154</span> +<span id="155">155</span> +<span id="156">156</span> +<span id="157">157</span> +<span id="158">158</span> +<span id="159">159</span> +<span id="160">160</span> +<span id="161">161</span> +<span id="162">162</span> +<span id="163">163</span> +<span id="164">164</span> +<span id="165">165</span> +<span id="166">166</span> +<span id="167">167</span> +<span id="168">168</span> +<span id="169">169</span> +<span id="170">170</span> +<span id="171">171</span> +<span id="172">172</span> +<span id="173">173</span> +<span id="174">174</span> +<span id="175">175</span> +<span id="176">176</span> +<span id="177">177</span> +<span id="178">178</span> +<span id="179">179</span> +<span id="180">180</span> +<span id="181">181</span> +<span id="182">182</span> +<span id="183">183</span> +<span id="184">184</span> +<span id="185">185</span> +<span id="186">186</span> +</pre><pre class='rust '> +<span class='comment'>// Tests for the serializer and deserializer are located in tests/serde_/mod.rs.</span> +<span class='comment'>// They can be run with `cargo test --features serde_tests`.</span> + +<span class='kw'>use</span> <span class='ident'>serde</span>::<span class='ident'>ser</span>::{<span class='ident'>Error</span> <span class='kw'>as</span> <span class='ident'>SerdeError</span>, <span class='ident'>MapVisitor</span>, <span class='ident'>Serialize</span>, <span class='ident'>Serializer</span> <span class='kw'>as</span> <span class='ident'>SerdeSerializer</span>, <span class='ident'>SeqVisitor</span>}; + +<span class='kw'>use</span> {<span class='ident'>Error</span>, <span class='ident'>EventWriter</span>, <span class='ident'>PlistEvent</span>}; + +<span class='kw'>impl</span> <span class='ident'>SerdeError</span> <span class='kw'>for</span> <span class='ident'>Error</span> { + <span class='kw'>fn</span> <span class='ident'>custom</span><span class='op'><</span><span class='ident'>T</span>: <span class='ident'>Into</span><span class='op'><</span><span class='ident'>String</span><span class='op'>>></span>(<span class='ident'>msg</span>: <span class='ident'>T</span>) <span class='op'>-></span> <span class='self'>Self</span> { + <span class='ident'>Error</span>::<span class='ident'>Serde</span>(<span class='ident'>msg</span>.<span class='ident'>into</span>()) + } + + <span class='kw'>fn</span> <span class='ident'>invalid_value</span>(_: <span class='kw-2'>&</span><span class='ident'>str</span>) <span class='op'>-></span> <span class='self'>Self</span> { + <span class='ident'>Error</span>::<span class='ident'>InvalidData</span> + } +} + +<span class='kw'>pub</span> <span class='kw'>struct</span> <span class='ident'>Serializer</span><span class='op'><</span><span class='ident'>W</span>: <span class='ident'>EventWriter</span><span class='op'>></span> { + <span class='ident'>writer</span>: <span class='ident'>W</span>, +} + +<span class='kw'>impl</span><span class='op'><</span><span class='ident'>W</span>: <span class='ident'>EventWriter</span><span class='op'>></span> <span class='ident'>Serializer</span><span class='op'><</span><span class='ident'>W</span><span class='op'>></span> { + <span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>new</span>(<span class='ident'>writer</span>: <span class='ident'>W</span>) <span class='op'>-></span> <span class='ident'>Serializer</span><span class='op'><</span><span class='ident'>W</span><span class='op'>></span> { + <span class='ident'>Serializer</span> { <span class='ident'>writer</span>: <span class='ident'>writer</span> } + } + + <span class='attribute'>#[<span class='ident'>inline</span>]</span> + <span class='kw'>fn</span> <span class='ident'>emit</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>event</span>: <span class='ident'>PlistEvent</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>(), <span class='ident'>Error</span><span class='op'>></span> { + <span class='self'>self</span>.<span class='ident'>writer</span>.<span class='ident'>write</span>(<span class='kw-2'>&</span><span class='ident'>event</span>) + } + + <span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>into_inner</span>(<span class='self'>self</span>) <span class='op'>-></span> <span class='ident'>W</span> { + <span class='self'>self</span>.<span class='ident'>writer</span> + } + + <span class='kw'>fn</span> <span class='ident'>single_key_dict</span><span class='op'><</span><span class='ident'>F</span><span class='op'>></span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, + <span class='ident'>key</span>: <span class='ident'>String</span>, + <span class='ident'>value_fn</span>: <span class='ident'>F</span>) + <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>(), <span class='op'><</span><span class='self'>Self</span> <span class='kw'>as</span> <span class='ident'>SerdeSerializer</span><span class='op'>></span>::<span class='ident'>Error</span><span class='op'>></span> + <span class='kw'>where</span> <span class='ident'>F</span>: <span class='ident'>FnOnce</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='ident'>Serializer</span><span class='op'><</span><span class='ident'>W</span><span class='op'>></span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>(), <span class='op'><</span><span class='self'>Self</span> <span class='kw'>as</span> <span class='ident'>SerdeSerializer</span><span class='op'>></span>::<span class='ident'>Error</span><span class='op'>></span> + { + <span class='comment'>// Emit {key: value}</span> + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>emit</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>StartDictionary</span>(<span class='prelude-val'>Some</span>(<span class='number'>1</span>)))); + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>emit</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>StringValue</span>(<span class='ident'>key</span>))); + <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>value_fn</span>(<span class='self'>self</span>)); + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>emit</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>EndDictionary</span>)); + <span class='prelude-val'>Ok</span>(()) + } +} + +<span class='kw'>impl</span><span class='op'><</span><span class='ident'>W</span>: <span class='ident'>EventWriter</span><span class='op'>></span> <span class='ident'>SerdeSerializer</span> <span class='kw'>for</span> <span class='ident'>Serializer</span><span class='op'><</span><span class='ident'>W</span><span class='op'>></span> { + <span class='kw'>type</span> <span class='ident'>Error</span> <span class='op'>=</span> <span class='ident'>Error</span>; + + <span class='kw'>fn</span> <span class='ident'>serialize_bool</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>v</span>: <span class='ident'>bool</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>(), <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> { + <span class='self'>self</span>.<span class='ident'>emit</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>BooleanValue</span>(<span class='ident'>v</span>)) + } + + <span class='kw'>fn</span> <span class='ident'>serialize_i64</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>v</span>: <span class='ident'>i64</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>(), <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> { + <span class='self'>self</span>.<span class='ident'>emit</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>IntegerValue</span>(<span class='ident'>v</span>)) + } + + <span class='kw'>fn</span> <span class='ident'>serialize_u64</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>v</span>: <span class='ident'>u64</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>(), <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> { + <span class='self'>self</span>.<span class='ident'>emit</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>IntegerValue</span>(<span class='ident'>v</span> <span class='kw'>as</span> <span class='ident'>i64</span>)) + } + + <span class='kw'>fn</span> <span class='ident'>serialize_f64</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>v</span>: <span class='ident'>f64</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>(), <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> { + <span class='self'>self</span>.<span class='ident'>emit</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>RealValue</span>(<span class='ident'>v</span>)) + } + + <span class='kw'>fn</span> <span class='ident'>serialize_str</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>value</span>: <span class='kw-2'>&</span><span class='ident'>str</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>(), <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> { + <span class='self'>self</span>.<span class='ident'>emit</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>StringValue</span>(<span class='ident'>value</span>.<span class='ident'>to_owned</span>())) + } + + <span class='kw'>fn</span> <span class='ident'>serialize_bytes</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>value</span>: <span class='kw-2'>&</span>[<span class='ident'>u8</span>]) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>(), <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> { + <span class='self'>self</span>.<span class='ident'>emit</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>DataValue</span>(<span class='ident'>value</span>.<span class='ident'>to_owned</span>())) + } + + <span class='kw'>fn</span> <span class='ident'>serialize_unit</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>(), <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> { + <span class='comment'>// Emit empty string</span> + <span class='self'>self</span>.<span class='ident'>emit</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>StringValue</span>(<span class='ident'>String</span>::<span class='ident'>new</span>())) + } + + <span class='kw'>fn</span> <span class='ident'>serialize_none</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>(), <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> { + <span class='self'>self</span>.<span class='ident'>single_key_dict</span>(<span class='string'>"None"</span>.<span class='ident'>to_owned</span>(), <span class='op'>|</span><span class='ident'>this</span><span class='op'>|</span> <span class='ident'>this</span>.<span class='ident'>serialize_unit</span>()) + } + + <span class='kw'>fn</span> <span class='ident'>serialize_some</span><span class='op'><</span><span class='ident'>V</span><span class='op'>></span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>value</span>: <span class='ident'>V</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>(), <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> + <span class='kw'>where</span> <span class='ident'>V</span>: <span class='ident'>Serialize</span> + { + <span class='self'>self</span>.<span class='ident'>single_key_dict</span>(<span class='string'>"Some"</span>.<span class='ident'>to_owned</span>(), <span class='op'>|</span><span class='ident'>this</span><span class='op'>|</span> <span class='ident'>value</span>.<span class='ident'>serialize</span>(<span class='ident'>this</span>)) + } + + <span class='kw'>fn</span> <span class='ident'>serialize_seq</span><span class='op'><</span><span class='ident'>V</span><span class='op'>></span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='kw-2'>mut</span> <span class='ident'>visitor</span>: <span class='ident'>V</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>(), <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> + <span class='kw'>where</span> <span class='ident'>V</span>: <span class='ident'>SeqVisitor</span> + { + <span class='kw'>let</span> <span class='ident'>len</span> <span class='op'>=</span> <span class='ident'>visitor</span>.<span class='ident'>len</span>().<span class='ident'>map</span>(<span class='op'>|</span><span class='ident'>len</span><span class='op'>|</span> <span class='ident'>len</span> <span class='kw'>as</span> <span class='ident'>u64</span>); + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>emit</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>StartArray</span>(<span class='ident'>len</span>))); + <span class='kw'>loop</span> { + <span class='kw'>match</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>visitor</span>.<span class='ident'>visit</span>(<span class='self'>self</span>)) { + <span class='prelude-val'>Some</span>(()) <span class='op'>=></span> (), + <span class='prelude-val'>None</span> <span class='op'>=></span> <span class='kw'>break</span>, + } + } + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>emit</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>EndArray</span>)); + <span class='prelude-val'>Ok</span>(()) + } + + <span class='kw'>fn</span> <span class='ident'>serialize_seq_elt</span><span class='op'><</span><span class='ident'>T</span><span class='op'>></span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>value</span>: <span class='ident'>T</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>(), <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> + <span class='kw'>where</span> <span class='ident'>T</span>: <span class='ident'>Serialize</span> + { + <span class='ident'>value</span>.<span class='ident'>serialize</span>(<span class='self'>self</span>) + } + + <span class='kw'>fn</span> <span class='ident'>serialize_map</span><span class='op'><</span><span class='ident'>V</span><span class='op'>></span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='kw-2'>mut</span> <span class='ident'>visitor</span>: <span class='ident'>V</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>(), <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> + <span class='kw'>where</span> <span class='ident'>V</span>: <span class='ident'>MapVisitor</span> + { + <span class='kw'>let</span> <span class='ident'>len</span> <span class='op'>=</span> <span class='ident'>visitor</span>.<span class='ident'>len</span>().<span class='ident'>map</span>(<span class='op'>|</span><span class='ident'>len</span><span class='op'>|</span> <span class='ident'>len</span> <span class='kw'>as</span> <span class='ident'>u64</span>); + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>emit</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>StartDictionary</span>(<span class='ident'>len</span>))); + <span class='kw'>loop</span> { + <span class='kw'>match</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>visitor</span>.<span class='ident'>visit</span>(<span class='self'>self</span>)) { + <span class='prelude-val'>Some</span>(()) <span class='op'>=></span> (), + <span class='prelude-val'>None</span> <span class='op'>=></span> <span class='kw'>break</span>, + } + } + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>emit</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>EndDictionary</span>)); + <span class='prelude-val'>Ok</span>(()) + } + + <span class='kw'>fn</span> <span class='ident'>serialize_map_elt</span><span class='op'><</span><span class='ident'>K</span>, <span class='ident'>V</span><span class='op'>></span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>key</span>: <span class='ident'>K</span>, <span class='ident'>value</span>: <span class='ident'>V</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>(), <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> + <span class='kw'>where</span> <span class='ident'>K</span>: <span class='ident'>Serialize</span>, + <span class='ident'>V</span>: <span class='ident'>Serialize</span> + { + <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>key</span>.<span class='ident'>serialize</span>(<span class='self'>self</span>)); + <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>value</span>.<span class='ident'>serialize</span>(<span class='self'>self</span>)); + <span class='prelude-val'>Ok</span>(()) + } + + <span class='kw'>fn</span> <span class='ident'>serialize_unit_variant</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, + <span class='ident'>_name</span>: <span class='kw-2'>&</span><span class='lifetime'>'static</span> <span class='ident'>str</span>, + <span class='ident'>_variant_index</span>: <span class='ident'>usize</span>, + <span class='ident'>variant</span>: <span class='kw-2'>&</span><span class='lifetime'>'static</span> <span class='ident'>str</span>) + <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>(), <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> { + <span class='self'>self</span>.<span class='ident'>single_key_dict</span>(<span class='ident'>variant</span>.<span class='ident'>to_owned</span>(), <span class='op'>|</span><span class='ident'>this</span><span class='op'>|</span> <span class='ident'>this</span>.<span class='ident'>serialize_unit</span>()) + } + + <span class='kw'>fn</span> <span class='ident'>serialize_newtype_struct</span><span class='op'><</span><span class='ident'>T</span><span class='op'>></span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>_name</span>: <span class='kw-2'>&</span><span class='lifetime'>'static</span> <span class='ident'>str</span>, <span class='ident'>value</span>: <span class='ident'>T</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>(), <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> + <span class='kw'>where</span> <span class='ident'>T</span>: <span class='ident'>Serialize</span> + { + <span class='ident'>value</span>.<span class='ident'>serialize</span>(<span class='self'>self</span>) + } + + <span class='kw'>fn</span> <span class='ident'>serialize_newtype_variant</span><span class='op'><</span><span class='ident'>T</span><span class='op'>></span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, + <span class='ident'>_name</span>: <span class='kw-2'>&</span><span class='lifetime'>'static</span> <span class='ident'>str</span>, + <span class='ident'>_variant_index</span>: <span class='ident'>usize</span>, + <span class='ident'>variant</span>: <span class='kw-2'>&</span><span class='lifetime'>'static</span> <span class='ident'>str</span>, + <span class='ident'>value</span>: <span class='ident'>T</span>) + <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>(), <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> + <span class='kw'>where</span> <span class='ident'>T</span>: <span class='ident'>Serialize</span> + { + <span class='self'>self</span>.<span class='ident'>single_key_dict</span>(<span class='ident'>variant</span>.<span class='ident'>to_owned</span>(), <span class='op'>|</span><span class='ident'>this</span><span class='op'>|</span> <span class='ident'>value</span>.<span class='ident'>serialize</span>(<span class='ident'>this</span>)) + } + + <span class='kw'>fn</span> <span class='ident'>serialize_tuple_variant</span><span class='op'><</span><span class='ident'>V</span><span class='op'>></span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, + <span class='ident'>_name</span>: <span class='kw-2'>&</span><span class='lifetime'>'static</span> <span class='ident'>str</span>, + <span class='ident'>_variant_index</span>: <span class='ident'>usize</span>, + <span class='ident'>variant</span>: <span class='kw-2'>&</span><span class='lifetime'>'static</span> <span class='ident'>str</span>, + <span class='ident'>visitor</span>: <span class='ident'>V</span>) + <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>(), <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> + <span class='kw'>where</span> <span class='ident'>V</span>: <span class='ident'>SeqVisitor</span> + { + <span class='self'>self</span>.<span class='ident'>single_key_dict</span>(<span class='ident'>variant</span>.<span class='ident'>to_owned</span>(), + <span class='op'>|</span><span class='ident'>this</span><span class='op'>|</span> <span class='ident'>this</span>.<span class='ident'>serialize_tuple_struct</span>(<span class='ident'>variant</span>, <span class='ident'>visitor</span>)) + } + + <span class='kw'>fn</span> <span class='ident'>serialize_struct_variant</span><span class='op'><</span><span class='ident'>V</span><span class='op'>></span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, + <span class='ident'>_name</span>: <span class='kw-2'>&</span><span class='lifetime'>'static</span> <span class='ident'>str</span>, + <span class='ident'>_variant_index</span>: <span class='ident'>usize</span>, + <span class='ident'>variant</span>: <span class='kw-2'>&</span><span class='lifetime'>'static</span> <span class='ident'>str</span>, + <span class='ident'>visitor</span>: <span class='ident'>V</span>) + <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>(), <span class='self'>Self</span>::<span class='ident'>Error</span><span class='op'>></span> + <span class='kw'>where</span> <span class='ident'>V</span>: <span class='ident'>MapVisitor</span> + { + <span class='self'>self</span>.<span class='ident'>single_key_dict</span>(<span class='ident'>variant</span>.<span class='ident'>to_owned</span>(), + <span class='op'>|</span><span class='ident'>this</span><span class='op'>|</span> <span class='ident'>this</span>.<span class='ident'>serialize_struct</span>(<span class='ident'>variant</span>, <span class='ident'>visitor</span>)) + } +} +</pre> +</section> + <section id='search' class="content hidden"></section> + + <section class="footer"></section> + + <aside id="help" class="hidden"> + <div> + <h1 class="hidden">Help</h1> + + <div class="shortcuts"> + <h2>Keyboard Shortcuts</h2> + + <dl> + <dt>?</dt> + <dd>Show this help dialog</dd> + <dt>S</dt> + <dd>Focus the search field</dd> + <dt>⇤</dt> + <dd>Move up in search results</dd> + <dt>⇥</dt> + <dd>Move down in search results</dd> + <dt>⏎</dt> + <dd>Go to active search result</dd> + <dt>+</dt> + <dd>Collapse/expand all sections</dd> + </dl> + </div> + + <div class="infos"> + <h2>Search Tricks</h2> + + <p> + Prefix searches with a type followed by a colon (e.g. + <code>fn:</code>) to restrict the search to a given type. + </p> + + <p> + Accepted types are: <code>fn</code>, <code>mod</code>, + <code>struct</code>, <code>enum</code>, + <code>trait</code>, <code>type</code>, <code>macro</code>, + and <code>const</code>. + </p> + + <p> + Search functions by type signature (e.g. + <code>vec -> usize</code> or <code>* -> vec</code>) + </p> + </div> + </div> + </aside> + + + + <script> + window.rootPath = "../../../"; + window.currentCrate = "plist"; + </script> + <script src="../../../jquery.js"></script> + <script src="../../../main.js"></script> + <script defer src="../../../search-index.js"></script> +</body> +</html>
\ No newline at end of file diff --git a/src/plist/src/xml/mod.rs.html b/src/plist/src/xml/mod.rs.html new file mode 100644 index 0000000..37c8434 --- /dev/null +++ b/src/plist/src/xml/mod.rs.html @@ -0,0 +1,118 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="generator" content="rustdoc"> + <meta name="description" content="Source to the Rust file `src/xml/mod.rs`."> + <meta name="keywords" content="rust, rustlang, rust-lang"> + + <title>mod.rs.html -- source</title> + + <link rel="stylesheet" type="text/css" href="../../../../rustdoc.css"> + <link rel="stylesheet" type="text/css" href="../../../../main.css"> + + + + +</head> +<body class="rustdoc"> + <!--[if lte IE 8]> + <div class="warning"> + This old browser is unsupported and will most likely display funky + things. + </div> + <![endif]--> + + + + <nav class="sidebar"> + + + </nav> + + <nav class="sub"> + <form class="search-form js-only"> + <div class="search-container"> + <input class="search-input" name="search" + autocomplete="off" + placeholder="Click or press ‘S’ to search, ‘?’ for more options…" + type="search"> + </div> + </form> + </nav> + + <section id='main' class="content source"><pre class="line-numbers"><span id="1">1</span> +<span id="2">2</span> +<span id="3">3</span> +<span id="4">4</span> +<span id="5">5</span> +</pre><pre class='rust '> +<span class='kw'>mod</span> <span class='ident'>reader</span>; +<span class='kw'>mod</span> <span class='ident'>writer</span>; + +<span class='kw'>pub</span> <span class='kw'>use</span> <span class='self'>self</span>::<span class='ident'>reader</span>::<span class='ident'>EventReader</span>; +<span class='kw'>pub</span> <span class='kw'>use</span> <span class='self'>self</span>::<span class='ident'>writer</span>::<span class='ident'>EventWriter</span>; +</pre> +</section> + <section id='search' class="content hidden"></section> + + <section class="footer"></section> + + <aside id="help" class="hidden"> + <div> + <h1 class="hidden">Help</h1> + + <div class="shortcuts"> + <h2>Keyboard Shortcuts</h2> + + <dl> + <dt>?</dt> + <dd>Show this help dialog</dd> + <dt>S</dt> + <dd>Focus the search field</dd> + <dt>⇤</dt> + <dd>Move up in search results</dd> + <dt>⇥</dt> + <dd>Move down in search results</dd> + <dt>⏎</dt> + <dd>Go to active search result</dd> + <dt>+</dt> + <dd>Collapse/expand all sections</dd> + </dl> + </div> + + <div class="infos"> + <h2>Search Tricks</h2> + + <p> + Prefix searches with a type followed by a colon (e.g. + <code>fn:</code>) to restrict the search to a given type. + </p> + + <p> + Accepted types are: <code>fn</code>, <code>mod</code>, + <code>struct</code>, <code>enum</code>, + <code>trait</code>, <code>type</code>, <code>macro</code>, + and <code>const</code>. + </p> + + <p> + Search functions by type signature (e.g. + <code>vec -> usize</code> or <code>* -> vec</code>) + </p> + </div> + </div> + </aside> + + + + <script> + window.rootPath = "../../../../"; + window.currentCrate = "plist"; + </script> + <script src="../../../../jquery.js"></script> + <script src="../../../../main.js"></script> + <script defer src="../../../../search-index.js"></script> +</body> +</html>
\ No newline at end of file diff --git a/src/plist/src/xml/reader.rs.html b/src/plist/src/xml/reader.rs.html new file mode 100644 index 0000000..612b8ab --- /dev/null +++ b/src/plist/src/xml/reader.rs.html @@ -0,0 +1,530 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="generator" content="rustdoc"> + <meta name="description" content="Source to the Rust file `src/xml/reader.rs`."> + <meta name="keywords" content="rust, rustlang, rust-lang"> + + <title>reader.rs.html -- source</title> + + <link rel="stylesheet" type="text/css" href="../../../../rustdoc.css"> + <link rel="stylesheet" type="text/css" href="../../../../main.css"> + + + + +</head> +<body class="rustdoc"> + <!--[if lte IE 8]> + <div class="warning"> + This old browser is unsupported and will most likely display funky + things. + </div> + <![endif]--> + + + + <nav class="sidebar"> + + + </nav> + + <nav class="sub"> + <form class="search-form js-only"> + <div class="search-container"> + <input class="search-input" name="search" + autocomplete="off" + placeholder="Click or press ‘S’ to search, ‘?’ for more options…" + type="search"> + </div> + </form> + </nav> + + <section id='main' class="content source"><pre class="line-numbers"><span id="1"> 1</span> +<span id="2"> 2</span> +<span id="3"> 3</span> +<span id="4"> 4</span> +<span id="5"> 5</span> +<span id="6"> 6</span> +<span id="7"> 7</span> +<span id="8"> 8</span> +<span id="9"> 9</span> +<span id="10"> 10</span> +<span id="11"> 11</span> +<span id="12"> 12</span> +<span id="13"> 13</span> +<span id="14"> 14</span> +<span id="15"> 15</span> +<span id="16"> 16</span> +<span id="17"> 17</span> +<span id="18"> 18</span> +<span id="19"> 19</span> +<span id="20"> 20</span> +<span id="21"> 21</span> +<span id="22"> 22</span> +<span id="23"> 23</span> +<span id="24"> 24</span> +<span id="25"> 25</span> +<span id="26"> 26</span> +<span id="27"> 27</span> +<span id="28"> 28</span> +<span id="29"> 29</span> +<span id="30"> 30</span> +<span id="31"> 31</span> +<span id="32"> 32</span> +<span id="33"> 33</span> +<span id="34"> 34</span> +<span id="35"> 35</span> +<span id="36"> 36</span> +<span id="37"> 37</span> +<span id="38"> 38</span> +<span id="39"> 39</span> +<span id="40"> 40</span> +<span id="41"> 41</span> +<span id="42"> 42</span> +<span id="43"> 43</span> +<span id="44"> 44</span> +<span id="45"> 45</span> +<span id="46"> 46</span> +<span id="47"> 47</span> +<span id="48"> 48</span> +<span id="49"> 49</span> +<span id="50"> 50</span> +<span id="51"> 51</span> +<span id="52"> 52</span> +<span id="53"> 53</span> +<span id="54"> 54</span> +<span id="55"> 55</span> +<span id="56"> 56</span> +<span id="57"> 57</span> +<span id="58"> 58</span> +<span id="59"> 59</span> +<span id="60"> 60</span> +<span id="61"> 61</span> +<span id="62"> 62</span> +<span id="63"> 63</span> +<span id="64"> 64</span> +<span id="65"> 65</span> +<span id="66"> 66</span> +<span id="67"> 67</span> +<span id="68"> 68</span> +<span id="69"> 69</span> +<span id="70"> 70</span> +<span id="71"> 71</span> +<span id="72"> 72</span> +<span id="73"> 73</span> +<span id="74"> 74</span> +<span id="75"> 75</span> +<span id="76"> 76</span> +<span id="77"> 77</span> +<span id="78"> 78</span> +<span id="79"> 79</span> +<span id="80"> 80</span> +<span id="81"> 81</span> +<span id="82"> 82</span> +<span id="83"> 83</span> +<span id="84"> 84</span> +<span id="85"> 85</span> +<span id="86"> 86</span> +<span id="87"> 87</span> +<span id="88"> 88</span> +<span id="89"> 89</span> +<span id="90"> 90</span> +<span id="91"> 91</span> +<span id="92"> 92</span> +<span id="93"> 93</span> +<span id="94"> 94</span> +<span id="95"> 95</span> +<span id="96"> 96</span> +<span id="97"> 97</span> +<span id="98"> 98</span> +<span id="99"> 99</span> +<span id="100">100</span> +<span id="101">101</span> +<span id="102">102</span> +<span id="103">103</span> +<span id="104">104</span> +<span id="105">105</span> +<span id="106">106</span> +<span id="107">107</span> +<span id="108">108</span> +<span id="109">109</span> +<span id="110">110</span> +<span id="111">111</span> +<span id="112">112</span> +<span id="113">113</span> +<span id="114">114</span> +<span id="115">115</span> +<span id="116">116</span> +<span id="117">117</span> +<span id="118">118</span> +<span id="119">119</span> +<span id="120">120</span> +<span id="121">121</span> +<span id="122">122</span> +<span id="123">123</span> +<span id="124">124</span> +<span id="125">125</span> +<span id="126">126</span> +<span id="127">127</span> +<span id="128">128</span> +<span id="129">129</span> +<span id="130">130</span> +<span id="131">131</span> +<span id="132">132</span> +<span id="133">133</span> +<span id="134">134</span> +<span id="135">135</span> +<span id="136">136</span> +<span id="137">137</span> +<span id="138">138</span> +<span id="139">139</span> +<span id="140">140</span> +<span id="141">141</span> +<span id="142">142</span> +<span id="143">143</span> +<span id="144">144</span> +<span id="145">145</span> +<span id="146">146</span> +<span id="147">147</span> +<span id="148">148</span> +<span id="149">149</span> +<span id="150">150</span> +<span id="151">151</span> +<span id="152">152</span> +<span id="153">153</span> +<span id="154">154</span> +<span id="155">155</span> +<span id="156">156</span> +<span id="157">157</span> +<span id="158">158</span> +<span id="159">159</span> +<span id="160">160</span> +<span id="161">161</span> +<span id="162">162</span> +<span id="163">163</span> +<span id="164">164</span> +<span id="165">165</span> +<span id="166">166</span> +<span id="167">167</span> +<span id="168">168</span> +<span id="169">169</span> +<span id="170">170</span> +<span id="171">171</span> +<span id="172">172</span> +<span id="173">173</span> +<span id="174">174</span> +<span id="175">175</span> +<span id="176">176</span> +<span id="177">177</span> +<span id="178">178</span> +<span id="179">179</span> +<span id="180">180</span> +<span id="181">181</span> +<span id="182">182</span> +<span id="183">183</span> +<span id="184">184</span> +<span id="185">185</span> +<span id="186">186</span> +<span id="187">187</span> +<span id="188">188</span> +<span id="189">189</span> +<span id="190">190</span> +<span id="191">191</span> +<span id="192">192</span> +<span id="193">193</span> +<span id="194">194</span> +<span id="195">195</span> +<span id="196">196</span> +<span id="197">197</span> +<span id="198">198</span> +<span id="199">199</span> +<span id="200">200</span> +<span id="201">201</span> +<span id="202">202</span> +<span id="203">203</span> +<span id="204">204</span> +<span id="205">205</span> +<span id="206">206</span> +<span id="207">207</span> +<span id="208">208</span> +<span id="209">209</span> +<span id="210">210</span> +<span id="211">211</span> +</pre><pre class='rust '> +<span class='kw'>use</span> <span class='ident'>chrono</span>::{<span class='ident'>DateTime</span>, <span class='ident'>UTC</span>}; +<span class='kw'>use</span> <span class='ident'>chrono</span>::<span class='ident'>format</span>::<span class='ident'>ParseError</span> <span class='kw'>as</span> <span class='ident'>ChronoParseError</span>; +<span class='kw'>use</span> <span class='ident'>rustc_serialize</span>::<span class='ident'>base64</span>::<span class='ident'>FromBase64</span>; +<span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>io</span>::<span class='ident'>Read</span>; +<span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>str</span>::<span class='ident'>FromStr</span>; +<span class='kw'>use</span> <span class='ident'>xml_rs</span>::<span class='ident'>reader</span>::{<span class='ident'>EventReader</span> <span class='kw'>as</span> <span class='ident'>XmlEventReader</span>, <span class='ident'>ParserConfig</span>, <span class='ident'>XmlEvent</span>}; + +<span class='kw'>use</span> {<span class='ident'>Error</span>, <span class='prelude-ty'>Result</span>, <span class='ident'>PlistEvent</span>}; + +<span class='kw'>impl</span> <span class='ident'>From</span><span class='op'><</span><span class='ident'>ChronoParseError</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>Error</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(_: <span class='ident'>ChronoParseError</span>) <span class='op'>-></span> <span class='ident'>Error</span> { + <span class='ident'>Error</span>::<span class='ident'>InvalidData</span> + } +} + +<span class='kw'>pub</span> <span class='kw'>struct</span> <span class='ident'>EventReader</span><span class='op'><</span><span class='ident'>R</span>: <span class='ident'>Read</span><span class='op'>></span> { + <span class='ident'>xml_reader</span>: <span class='ident'>XmlEventReader</span><span class='op'><</span><span class='ident'>R</span><span class='op'>></span>, + <span class='ident'>queued_event</span>: <span class='prelude-ty'>Option</span><span class='op'><</span><span class='ident'>XmlEvent</span><span class='op'>></span>, + <span class='ident'>element_stack</span>: <span class='ident'>Vec</span><span class='op'><</span><span class='ident'>String</span><span class='op'>></span>, + <span class='ident'>finished</span>: <span class='ident'>bool</span>, +} + +<span class='kw'>impl</span><span class='op'><</span><span class='ident'>R</span>: <span class='ident'>Read</span><span class='op'>></span> <span class='ident'>EventReader</span><span class='op'><</span><span class='ident'>R</span><span class='op'>></span> { + <span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>new</span>(<span class='ident'>reader</span>: <span class='ident'>R</span>) <span class='op'>-></span> <span class='ident'>EventReader</span><span class='op'><</span><span class='ident'>R</span><span class='op'>></span> { + <span class='kw'>let</span> <span class='ident'>config</span> <span class='op'>=</span> <span class='ident'>ParserConfig</span> { + <span class='ident'>trim_whitespace</span>: <span class='bool-val'>false</span>, + <span class='ident'>whitespace_to_characters</span>: <span class='bool-val'>true</span>, + <span class='ident'>cdata_to_characters</span>: <span class='bool-val'>true</span>, + <span class='ident'>ignore_comments</span>: <span class='bool-val'>true</span>, + <span class='ident'>coalesce_characters</span>: <span class='bool-val'>true</span>, + }; + + <span class='ident'>EventReader</span> { + <span class='ident'>xml_reader</span>: <span class='ident'>XmlEventReader</span>::<span class='ident'>new_with_config</span>(<span class='ident'>reader</span>, <span class='ident'>config</span>), + <span class='ident'>queued_event</span>: <span class='prelude-val'>None</span>, + <span class='ident'>element_stack</span>: <span class='ident'>Vec</span>::<span class='ident'>new</span>(), + <span class='ident'>finished</span>: <span class='bool-val'>false</span>, + } + } + + <span class='kw'>fn</span> <span class='ident'>read_content</span><span class='op'><</span><span class='ident'>F</span><span class='op'>></span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>f</span>: <span class='ident'>F</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>PlistEvent</span><span class='op'>></span> + <span class='kw'>where</span> <span class='ident'>F</span>: <span class='ident'>FnOnce</span>(<span class='ident'>String</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>PlistEvent</span><span class='op'>></span> + { + <span class='kw'>match</span> <span class='self'>self</span>.<span class='ident'>xml_reader</span>.<span class='ident'>next</span>() { + <span class='prelude-val'>Ok</span>(<span class='ident'>XmlEvent</span>::<span class='ident'>Characters</span>(<span class='ident'>s</span>)) <span class='op'>=></span> <span class='ident'>f</span>(<span class='ident'>s</span>), + <span class='prelude-val'>Ok</span>(<span class='ident'>event</span> @ <span class='ident'>XmlEvent</span>::<span class='ident'>EndElement</span>{..}) <span class='op'>=></span> { + <span class='self'>self</span>.<span class='ident'>queued_event</span> <span class='op'>=</span> <span class='prelude-val'>Some</span>(<span class='ident'>event</span>); + <span class='ident'>f</span>(<span class='string'>""</span>.<span class='ident'>to_owned</span>()) + } + _ <span class='op'>=></span> <span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>InvalidData</span>), + } + } + + <span class='kw'>fn</span> <span class='ident'>next_event</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-></span> ::<span class='ident'>std</span>::<span class='ident'>result</span>::<span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>XmlEvent</span>, ()<span class='op'>></span> { + <span class='kw'>if</span> <span class='kw'>let</span> <span class='prelude-val'>Some</span>(<span class='ident'>event</span>) <span class='op'>=</span> <span class='self'>self</span>.<span class='ident'>queued_event</span>.<span class='ident'>take</span>() { + <span class='prelude-val'>Ok</span>(<span class='ident'>event</span>) + } <span class='kw'>else</span> { + <span class='self'>self</span>.<span class='ident'>xml_reader</span>.<span class='ident'>next</span>().<span class='ident'>map_err</span>(<span class='op'>|</span>_<span class='op'>|</span> ()) + } + } + + <span class='kw'>fn</span> <span class='ident'>read_next</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Option</span><span class='op'><</span><span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>PlistEvent</span><span class='op'>>></span> { + <span class='kw'>loop</span> { + <span class='kw'>match</span> <span class='self'>self</span>.<span class='ident'>next_event</span>() { + <span class='prelude-val'>Ok</span>(<span class='ident'>XmlEvent</span>::<span class='ident'>StartElement</span> { <span class='ident'>name</span>, .. }) <span class='op'>=></span> { + <span class='comment'>// Add the current element to the element stack</span> + <span class='self'>self</span>.<span class='ident'>element_stack</span>.<span class='ident'>push</span>(<span class='ident'>name</span>.<span class='ident'>local_name</span>.<span class='ident'>clone</span>()); + + <span class='kw'>match</span> <span class='kw-2'>&</span><span class='ident'>name</span>.<span class='ident'>local_name</span>[..] { + <span class='string'>"plist"</span> <span class='op'>=></span> (), + <span class='string'>"array"</span> <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Some</span>(<span class='prelude-val'>Ok</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>StartArray</span>(<span class='prelude-val'>None</span>))), + <span class='string'>"dict"</span> <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Some</span>(<span class='prelude-val'>Ok</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>StartDictionary</span>(<span class='prelude-val'>None</span>))), + <span class='string'>"key"</span> <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Some</span>(<span class='self'>self</span>.<span class='ident'>read_content</span>(<span class='op'>|</span><span class='ident'>s</span><span class='op'>|</span> <span class='prelude-val'>Ok</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>StringValue</span>(<span class='ident'>s</span>)))), + <span class='string'>"true"</span> <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Some</span>(<span class='prelude-val'>Ok</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>BooleanValue</span>(<span class='bool-val'>true</span>))), + <span class='string'>"false"</span> <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Some</span>(<span class='prelude-val'>Ok</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>BooleanValue</span>(<span class='bool-val'>false</span>))), + <span class='string'>"data"</span> <span class='op'>=></span> { + <span class='kw'>return</span> <span class='prelude-val'>Some</span>(<span class='self'>self</span>.<span class='ident'>read_content</span>(<span class='op'>|</span><span class='ident'>s</span><span class='op'>|</span> { + <span class='kw'>let</span> <span class='ident'>s</span>: <span class='ident'>String</span> <span class='op'>=</span> <span class='ident'>s</span>.<span class='ident'>replace</span>(<span class='string'>" "</span>, <span class='string'>""</span>).<span class='ident'>replace</span>(<span class='string'>"\t"</span>, <span class='string'>""</span>); + <span class='kw'>match</span> <span class='ident'>FromBase64</span>::<span class='ident'>from_base64</span>(<span class='kw-2'>&</span><span class='ident'>s</span>[..]) { + <span class='prelude-val'>Ok</span>(<span class='ident'>b</span>) <span class='op'>=></span> <span class='prelude-val'>Ok</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>DataValue</span>(<span class='ident'>b</span>)), + <span class='prelude-val'>Err</span>(_) <span class='op'>=></span> <span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>InvalidData</span>), + } + })) + } + <span class='string'>"date"</span> <span class='op'>=></span> { + <span class='kw'>return</span> <span class='prelude-val'>Some</span>(<span class='self'>self</span>.<span class='ident'>read_content</span>(<span class='op'>|</span><span class='ident'>s</span><span class='op'>|</span> { + <span class='kw'>let</span> <span class='ident'>date</span> <span class='op'>=</span> <span class='macro'>try</span><span class='macro'>!</span>(<span class='ident'>DateTime</span>::<span class='ident'>parse_from_rfc3339</span>(<span class='kw-2'>&</span><span class='ident'>s</span>)); + <span class='prelude-val'>Ok</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>DateValue</span>(<span class='ident'>date</span>.<span class='ident'>with_timezone</span>(<span class='kw-2'>&</span><span class='ident'>UTC</span>))) + })) + } + <span class='string'>"integer"</span> <span class='op'>=></span> { + <span class='kw'>return</span> <span class='prelude-val'>Some</span>(<span class='self'>self</span>.<span class='ident'>read_content</span>(<span class='op'>|</span><span class='ident'>s</span><span class='op'>|</span> { + <span class='kw'>match</span> <span class='ident'>FromStr</span>::<span class='ident'>from_str</span>(<span class='kw-2'>&</span><span class='ident'>s</span>) { + <span class='prelude-val'>Ok</span>(<span class='ident'>i</span>) <span class='op'>=></span> <span class='prelude-val'>Ok</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>IntegerValue</span>(<span class='ident'>i</span>)), + <span class='prelude-val'>Err</span>(_) <span class='op'>=></span> <span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>InvalidData</span>), + } + })) + } + <span class='string'>"real"</span> <span class='op'>=></span> { + <span class='kw'>return</span> <span class='prelude-val'>Some</span>(<span class='self'>self</span>.<span class='ident'>read_content</span>(<span class='op'>|</span><span class='ident'>s</span><span class='op'>|</span> { + <span class='kw'>match</span> <span class='ident'>FromStr</span>::<span class='ident'>from_str</span>(<span class='kw-2'>&</span><span class='ident'>s</span>) { + <span class='prelude-val'>Ok</span>(<span class='ident'>f</span>) <span class='op'>=></span> <span class='prelude-val'>Ok</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>RealValue</span>(<span class='ident'>f</span>)), + <span class='prelude-val'>Err</span>(_) <span class='op'>=></span> <span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>InvalidData</span>), + } + })) + } + <span class='string'>"string"</span> <span class='op'>=></span> { + <span class='kw'>return</span> <span class='prelude-val'>Some</span>(<span class='self'>self</span>.<span class='ident'>read_content</span>(<span class='op'>|</span><span class='ident'>s</span><span class='op'>|</span> <span class='prelude-val'>Ok</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>StringValue</span>(<span class='ident'>s</span>)))) + } + _ <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Some</span>(<span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>InvalidData</span>)), + } + } + <span class='prelude-val'>Ok</span>(<span class='ident'>XmlEvent</span>::<span class='ident'>EndElement</span> { <span class='ident'>name</span>, .. }) <span class='op'>=></span> { + <span class='comment'>// Check the corrent element is being closed</span> + <span class='kw'>match</span> <span class='self'>self</span>.<span class='ident'>element_stack</span>.<span class='ident'>pop</span>() { + <span class='prelude-val'>Some</span>(<span class='kw-2'>ref</span> <span class='ident'>open_name</span>) <span class='kw'>if</span> <span class='kw-2'>&</span><span class='ident'>name</span>.<span class='ident'>local_name</span> <span class='op'>==</span> <span class='ident'>open_name</span> <span class='op'>=></span> (), + <span class='prelude-val'>Some</span>(<span class='kw-2'>ref</span> <span class='ident'>_open_name</span>) <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Some</span>(<span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>InvalidData</span>)), + <span class='prelude-val'>None</span> <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Some</span>(<span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>InvalidData</span>)), + } + + <span class='kw'>match</span> <span class='kw-2'>&</span><span class='ident'>name</span>.<span class='ident'>local_name</span>[..] { + <span class='string'>"array"</span> <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Some</span>(<span class='prelude-val'>Ok</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>EndArray</span>)), + <span class='string'>"dict"</span> <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Some</span>(<span class='prelude-val'>Ok</span>(<span class='ident'>PlistEvent</span>::<span class='ident'>EndDictionary</span>)), + <span class='string'>"plist"</span> <span class='op'>=></span> (), + _ <span class='op'>=></span> (), + } + } + <span class='prelude-val'>Ok</span>(<span class='ident'>XmlEvent</span>::<span class='ident'>EndDocument</span>) <span class='op'>=></span> { + <span class='kw'>match</span> <span class='self'>self</span>.<span class='ident'>element_stack</span>.<span class='ident'>is_empty</span>() { + <span class='bool-val'>true</span> <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>None</span>, + <span class='bool-val'>false</span> <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Some</span>(<span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>UnexpectedEof</span>)), + } + } + <span class='prelude-val'>Err</span>(_) <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Some</span>(<span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>InvalidData</span>)), + _ <span class='op'>=></span> (), + } + } + } +} + +<span class='kw'>impl</span><span class='op'><</span><span class='ident'>R</span>: <span class='ident'>Read</span><span class='op'>></span> <span class='ident'>Iterator</span> <span class='kw'>for</span> <span class='ident'>EventReader</span><span class='op'><</span><span class='ident'>R</span><span class='op'>></span> { + <span class='kw'>type</span> <span class='ident'>Item</span> <span class='op'>=</span> <span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>PlistEvent</span><span class='op'>></span>; + + <span class='kw'>fn</span> <span class='ident'>next</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Option</span><span class='op'><</span><span class='prelude-ty'>Result</span><span class='op'><</span><span class='ident'>PlistEvent</span><span class='op'>>></span> { + <span class='kw'>if</span> <span class='self'>self</span>.<span class='ident'>finished</span> { + <span class='prelude-val'>None</span> + } <span class='kw'>else</span> { + <span class='kw'>match</span> <span class='self'>self</span>.<span class='ident'>read_next</span>() { + <span class='prelude-val'>Some</span>(<span class='prelude-val'>Ok</span>(<span class='ident'>event</span>)) <span class='op'>=></span> <span class='prelude-val'>Some</span>(<span class='prelude-val'>Ok</span>(<span class='ident'>event</span>)), + <span class='prelude-val'>Some</span>(<span class='prelude-val'>Err</span>(<span class='ident'>err</span>)) <span class='op'>=></span> { + <span class='self'>self</span>.<span class='ident'>finished</span> <span class='op'>=</span> <span class='bool-val'>true</span>; + <span class='prelude-val'>Some</span>(<span class='prelude-val'>Err</span>(<span class='ident'>err</span>)) + } + <span class='prelude-val'>None</span> <span class='op'>=></span> { + <span class='self'>self</span>.<span class='ident'>finished</span> <span class='op'>=</span> <span class='bool-val'>true</span>; + <span class='prelude-val'>None</span> + } + } + } + } +} + +<span class='attribute'>#[<span class='ident'>cfg</span>(<span class='ident'>test</span>)]</span> +<span class='kw'>mod</span> <span class='ident'>tests</span> { + <span class='kw'>use</span> <span class='ident'>chrono</span>::{<span class='ident'>TimeZone</span>, <span class='ident'>UTC</span>}; + <span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>fs</span>::<span class='ident'>File</span>; + <span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>path</span>::<span class='ident'>Path</span>; + + <span class='kw'>use</span> <span class='kw'>super</span>::<span class='op'>*</span>; + <span class='kw'>use</span> <span class='ident'>PlistEvent</span>; + + <span class='attribute'>#[<span class='ident'>test</span>]</span> + <span class='kw'>fn</span> <span class='ident'>streaming_parser</span>() { + <span class='kw'>use</span> <span class='ident'>PlistEvent</span>::<span class='op'>*</span>; + + <span class='kw'>let</span> <span class='ident'>reader</span> <span class='op'>=</span> <span class='ident'>File</span>::<span class='ident'>open</span>(<span class='kw-2'>&</span><span class='ident'>Path</span>::<span class='ident'>new</span>(<span class='string'>"./tests/data/xml.plist"</span>)).<span class='ident'>unwrap</span>(); + <span class='kw'>let</span> <span class='ident'>streaming_parser</span> <span class='op'>=</span> <span class='ident'>EventReader</span>::<span class='ident'>new</span>(<span class='ident'>reader</span>); + <span class='kw'>let</span> <span class='ident'>events</span>: <span class='ident'>Vec</span><span class='op'><</span><span class='ident'>PlistEvent</span><span class='op'>></span> <span class='op'>=</span> <span class='ident'>streaming_parser</span>.<span class='ident'>map</span>(<span class='op'>|</span><span class='ident'>e</span><span class='op'>|</span> <span class='ident'>e</span>.<span class='ident'>unwrap</span>()).<span class='ident'>collect</span>(); + + <span class='kw'>let</span> <span class='ident'>comparison</span> <span class='op'>=</span> <span class='kw-2'>&</span>[<span class='ident'>StartDictionary</span>(<span class='prelude-val'>None</span>), + <span class='ident'>StringValue</span>(<span class='string'>"Author"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>StringValue</span>(<span class='string'>"William Shakespeare"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>StringValue</span>(<span class='string'>"Lines"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>StartArray</span>(<span class='prelude-val'>None</span>), + <span class='ident'>StringValue</span>(<span class='string'>"It is a tale told by an idiot,"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>StringValue</span>(<span class='string'>"Full of sound and fury, signifying nothing."</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>EndArray</span>, + <span class='ident'>StringValue</span>(<span class='string'>"Death"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>IntegerValue</span>(<span class='number'>1564</span>), + <span class='ident'>StringValue</span>(<span class='string'>"Height"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>RealValue</span>(<span class='number'>1.60</span>), + <span class='ident'>StringValue</span>(<span class='string'>"Data"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>DataValue</span>(<span class='macro'>vec</span><span class='macro'>!</span>[<span class='number'>0</span>, <span class='number'>0</span>, <span class='number'>0</span>, <span class='number'>190</span>, <span class='number'>0</span>, <span class='number'>0</span>, <span class='number'>0</span>, <span class='number'>3</span>, <span class='number'>0</span>, <span class='number'>0</span>, <span class='number'>0</span>, <span class='number'>30</span>, <span class='number'>0</span>, <span class='number'>0</span>, <span class='number'>0</span>]), + <span class='ident'>StringValue</span>(<span class='string'>"Birthdate"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>DateValue</span>(<span class='ident'>UTC</span>.<span class='ident'>ymd</span>(<span class='number'>1981</span>, <span class='number'>05</span>, <span class='number'>16</span>).<span class='ident'>and_hms</span>(<span class='number'>11</span>, <span class='number'>32</span>, <span class='number'>06</span>)), + <span class='ident'>StringValue</span>(<span class='string'>"Blank"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>StringValue</span>(<span class='string'>""</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>EndDictionary</span>]; + + <span class='macro'>assert_eq</span><span class='macro'>!</span>(<span class='ident'>events</span>, <span class='ident'>comparison</span>); + } + + <span class='attribute'>#[<span class='ident'>test</span>]</span> + <span class='kw'>fn</span> <span class='ident'>bad_data</span>() { + <span class='kw'>let</span> <span class='ident'>reader</span> <span class='op'>=</span> <span class='ident'>File</span>::<span class='ident'>open</span>(<span class='kw-2'>&</span><span class='ident'>Path</span>::<span class='ident'>new</span>(<span class='string'>"./tests/data/xml_error.plist"</span>)).<span class='ident'>unwrap</span>(); + <span class='kw'>let</span> <span class='ident'>streaming_parser</span> <span class='op'>=</span> <span class='ident'>EventReader</span>::<span class='ident'>new</span>(<span class='ident'>reader</span>); + <span class='kw'>let</span> <span class='ident'>events</span>: <span class='ident'>Vec</span><span class='op'><</span>_<span class='op'>></span> <span class='op'>=</span> <span class='ident'>streaming_parser</span>.<span class='ident'>collect</span>(); + + <span class='macro'>assert</span><span class='macro'>!</span>(<span class='ident'>events</span>.<span class='ident'>last</span>().<span class='ident'>unwrap</span>().<span class='ident'>is_err</span>()); + } +} +</pre> +</section> + <section id='search' class="content hidden"></section> + + <section class="footer"></section> + + <aside id="help" class="hidden"> + <div> + <h1 class="hidden">Help</h1> + + <div class="shortcuts"> + <h2>Keyboard Shortcuts</h2> + + <dl> + <dt>?</dt> + <dd>Show this help dialog</dd> + <dt>S</dt> + <dd>Focus the search field</dd> + <dt>⇤</dt> + <dd>Move up in search results</dd> + <dt>⇥</dt> + <dd>Move down in search results</dd> + <dt>⏎</dt> + <dd>Go to active search result</dd> + <dt>+</dt> + <dd>Collapse/expand all sections</dd> + </dl> + </div> + + <div class="infos"> + <h2>Search Tricks</h2> + + <p> + Prefix searches with a type followed by a colon (e.g. + <code>fn:</code>) to restrict the search to a given type. + </p> + + <p> + Accepted types are: <code>fn</code>, <code>mod</code>, + <code>struct</code>, <code>enum</code>, + <code>trait</code>, <code>type</code>, <code>macro</code>, + and <code>const</code>. + </p> + + <p> + Search functions by type signature (e.g. + <code>vec -> usize</code> or <code>* -> vec</code>) + </p> + </div> + </div> + </aside> + + + + <script> + window.rootPath = "../../../../"; + window.currentCrate = "plist"; + </script> + <script src="../../../../jquery.js"></script> + <script src="../../../../main.js"></script> + <script defer src="../../../../search-index.js"></script> +</body> +</html>
\ No newline at end of file diff --git a/src/plist/src/xml/writer.rs.html b/src/plist/src/xml/writer.rs.html new file mode 100644 index 0000000..bc7c990 --- /dev/null +++ b/src/plist/src/xml/writer.rs.html @@ -0,0 +1,614 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="generator" content="rustdoc"> + <meta name="description" content="Source to the Rust file `src/xml/writer.rs`."> + <meta name="keywords" content="rust, rustlang, rust-lang"> + + <title>writer.rs.html -- source</title> + + <link rel="stylesheet" type="text/css" href="../../../../rustdoc.css"> + <link rel="stylesheet" type="text/css" href="../../../../main.css"> + + + + +</head> +<body class="rustdoc"> + <!--[if lte IE 8]> + <div class="warning"> + This old browser is unsupported and will most likely display funky + things. + </div> + <![endif]--> + + + + <nav class="sidebar"> + + + </nav> + + <nav class="sub"> + <form class="search-form js-only"> + <div class="search-container"> + <input class="search-input" name="search" + autocomplete="off" + placeholder="Click or press ‘S’ to search, ‘?’ for more options…" + type="search"> + </div> + </form> + </nav> + + <section id='main' class="content source"><pre class="line-numbers"><span id="1"> 1</span> +<span id="2"> 2</span> +<span id="3"> 3</span> +<span id="4"> 4</span> +<span id="5"> 5</span> +<span id="6"> 6</span> +<span id="7"> 7</span> +<span id="8"> 8</span> +<span id="9"> 9</span> +<span id="10"> 10</span> +<span id="11"> 11</span> +<span id="12"> 12</span> +<span id="13"> 13</span> +<span id="14"> 14</span> +<span id="15"> 15</span> +<span id="16"> 16</span> +<span id="17"> 17</span> +<span id="18"> 18</span> +<span id="19"> 19</span> +<span id="20"> 20</span> +<span id="21"> 21</span> +<span id="22"> 22</span> +<span id="23"> 23</span> +<span id="24"> 24</span> +<span id="25"> 25</span> +<span id="26"> 26</span> +<span id="27"> 27</span> +<span id="28"> 28</span> +<span id="29"> 29</span> +<span id="30"> 30</span> +<span id="31"> 31</span> +<span id="32"> 32</span> +<span id="33"> 33</span> +<span id="34"> 34</span> +<span id="35"> 35</span> +<span id="36"> 36</span> +<span id="37"> 37</span> +<span id="38"> 38</span> +<span id="39"> 39</span> +<span id="40"> 40</span> +<span id="41"> 41</span> +<span id="42"> 42</span> +<span id="43"> 43</span> +<span id="44"> 44</span> +<span id="45"> 45</span> +<span id="46"> 46</span> +<span id="47"> 47</span> +<span id="48"> 48</span> +<span id="49"> 49</span> +<span id="50"> 50</span> +<span id="51"> 51</span> +<span id="52"> 52</span> +<span id="53"> 53</span> +<span id="54"> 54</span> +<span id="55"> 55</span> +<span id="56"> 56</span> +<span id="57"> 57</span> +<span id="58"> 58</span> +<span id="59"> 59</span> +<span id="60"> 60</span> +<span id="61"> 61</span> +<span id="62"> 62</span> +<span id="63"> 63</span> +<span id="64"> 64</span> +<span id="65"> 65</span> +<span id="66"> 66</span> +<span id="67"> 67</span> +<span id="68"> 68</span> +<span id="69"> 69</span> +<span id="70"> 70</span> +<span id="71"> 71</span> +<span id="72"> 72</span> +<span id="73"> 73</span> +<span id="74"> 74</span> +<span id="75"> 75</span> +<span id="76"> 76</span> +<span id="77"> 77</span> +<span id="78"> 78</span> +<span id="79"> 79</span> +<span id="80"> 80</span> +<span id="81"> 81</span> +<span id="82"> 82</span> +<span id="83"> 83</span> +<span id="84"> 84</span> +<span id="85"> 85</span> +<span id="86"> 86</span> +<span id="87"> 87</span> +<span id="88"> 88</span> +<span id="89"> 89</span> +<span id="90"> 90</span> +<span id="91"> 91</span> +<span id="92"> 92</span> +<span id="93"> 93</span> +<span id="94"> 94</span> +<span id="95"> 95</span> +<span id="96"> 96</span> +<span id="97"> 97</span> +<span id="98"> 98</span> +<span id="99"> 99</span> +<span id="100">100</span> +<span id="101">101</span> +<span id="102">102</span> +<span id="103">103</span> +<span id="104">104</span> +<span id="105">105</span> +<span id="106">106</span> +<span id="107">107</span> +<span id="108">108</span> +<span id="109">109</span> +<span id="110">110</span> +<span id="111">111</span> +<span id="112">112</span> +<span id="113">113</span> +<span id="114">114</span> +<span id="115">115</span> +<span id="116">116</span> +<span id="117">117</span> +<span id="118">118</span> +<span id="119">119</span> +<span id="120">120</span> +<span id="121">121</span> +<span id="122">122</span> +<span id="123">123</span> +<span id="124">124</span> +<span id="125">125</span> +<span id="126">126</span> +<span id="127">127</span> +<span id="128">128</span> +<span id="129">129</span> +<span id="130">130</span> +<span id="131">131</span> +<span id="132">132</span> +<span id="133">133</span> +<span id="134">134</span> +<span id="135">135</span> +<span id="136">136</span> +<span id="137">137</span> +<span id="138">138</span> +<span id="139">139</span> +<span id="140">140</span> +<span id="141">141</span> +<span id="142">142</span> +<span id="143">143</span> +<span id="144">144</span> +<span id="145">145</span> +<span id="146">146</span> +<span id="147">147</span> +<span id="148">148</span> +<span id="149">149</span> +<span id="150">150</span> +<span id="151">151</span> +<span id="152">152</span> +<span id="153">153</span> +<span id="154">154</span> +<span id="155">155</span> +<span id="156">156</span> +<span id="157">157</span> +<span id="158">158</span> +<span id="159">159</span> +<span id="160">160</span> +<span id="161">161</span> +<span id="162">162</span> +<span id="163">163</span> +<span id="164">164</span> +<span id="165">165</span> +<span id="166">166</span> +<span id="167">167</span> +<span id="168">168</span> +<span id="169">169</span> +<span id="170">170</span> +<span id="171">171</span> +<span id="172">172</span> +<span id="173">173</span> +<span id="174">174</span> +<span id="175">175</span> +<span id="176">176</span> +<span id="177">177</span> +<span id="178">178</span> +<span id="179">179</span> +<span id="180">180</span> +<span id="181">181</span> +<span id="182">182</span> +<span id="183">183</span> +<span id="184">184</span> +<span id="185">185</span> +<span id="186">186</span> +<span id="187">187</span> +<span id="188">188</span> +<span id="189">189</span> +<span id="190">190</span> +<span id="191">191</span> +<span id="192">192</span> +<span id="193">193</span> +<span id="194">194</span> +<span id="195">195</span> +<span id="196">196</span> +<span id="197">197</span> +<span id="198">198</span> +<span id="199">199</span> +<span id="200">200</span> +<span id="201">201</span> +<span id="202">202</span> +<span id="203">203</span> +<span id="204">204</span> +<span id="205">205</span> +<span id="206">206</span> +<span id="207">207</span> +<span id="208">208</span> +<span id="209">209</span> +<span id="210">210</span> +<span id="211">211</span> +<span id="212">212</span> +<span id="213">213</span> +<span id="214">214</span> +<span id="215">215</span> +<span id="216">216</span> +<span id="217">217</span> +<span id="218">218</span> +<span id="219">219</span> +<span id="220">220</span> +<span id="221">221</span> +<span id="222">222</span> +<span id="223">223</span> +<span id="224">224</span> +<span id="225">225</span> +<span id="226">226</span> +<span id="227">227</span> +<span id="228">228</span> +<span id="229">229</span> +<span id="230">230</span> +<span id="231">231</span> +<span id="232">232</span> +<span id="233">233</span> +<span id="234">234</span> +<span id="235">235</span> +<span id="236">236</span> +<span id="237">237</span> +<span id="238">238</span> +<span id="239">239</span> +<span id="240">240</span> +<span id="241">241</span> +<span id="242">242</span> +<span id="243">243</span> +<span id="244">244</span> +<span id="245">245</span> +<span id="246">246</span> +<span id="247">247</span> +<span id="248">248</span> +<span id="249">249</span> +<span id="250">250</span> +<span id="251">251</span> +<span id="252">252</span> +<span id="253">253</span> +</pre><pre class='rust '> +<span class='kw'>use</span> <span class='ident'>rustc_serialize</span>::<span class='ident'>base64</span>::{<span class='ident'>MIME</span>, <span class='ident'>ToBase64</span>}; +<span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>borrow</span>::<span class='ident'>Cow</span>; +<span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>io</span>::<span class='ident'>Write</span>; +<span class='kw'>use</span> <span class='ident'>xml_rs</span>::<span class='ident'>attribute</span>::<span class='ident'>Attribute</span>; +<span class='kw'>use</span> <span class='ident'>xml_rs</span>::<span class='ident'>name</span>::<span class='ident'>Name</span>; +<span class='kw'>use</span> <span class='ident'>xml_rs</span>::<span class='ident'>namespace</span>::<span class='ident'>Namespace</span>; +<span class='kw'>use</span> <span class='ident'>xml_rs</span>::<span class='ident'>writer</span>::{<span class='ident'>Error</span> <span class='kw'>as</span> <span class='ident'>XmlWriterError</span>, <span class='ident'>EventWriter</span> <span class='kw'>as</span> <span class='ident'>XmlEventWriter</span>, <span class='ident'>EmitterConfig</span>}; +<span class='kw'>use</span> <span class='ident'>xml_rs</span>::<span class='ident'>writer</span>::<span class='ident'>events</span>::<span class='ident'>XmlEvent</span> <span class='kw'>as</span> <span class='ident'>WriteXmlEvent</span>; + +<span class='kw'>use</span> {<span class='ident'>Error</span>, <span class='ident'>EventWriter</span> <span class='kw'>as</span> <span class='ident'>PlistEventWriter</span>, <span class='ident'>PlistEvent</span>, <span class='prelude-ty'>Result</span>}; + +<span class='kw'>impl</span> <span class='ident'>From</span><span class='op'><</span><span class='ident'>XmlWriterError</span><span class='op'>></span> <span class='kw'>for</span> <span class='ident'>Error</span> { + <span class='kw'>fn</span> <span class='ident'>from</span>(<span class='ident'>err</span>: <span class='ident'>XmlWriterError</span>) <span class='op'>-></span> <span class='ident'>Error</span> { + <span class='kw'>match</span> <span class='ident'>err</span> { + <span class='ident'>XmlWriterError</span>::<span class='ident'>Io</span>(<span class='ident'>err</span>) <span class='op'>=></span> <span class='ident'>Error</span>::<span class='ident'>Io</span>(<span class='ident'>err</span>), + _ <span class='op'>=></span> <span class='ident'>Error</span>::<span class='ident'>InvalidData</span>, + } + } +} + +<span class='kw'>enum</span> <span class='ident'>Element</span> { + <span class='ident'>Dictionary</span>(<span class='ident'>DictionaryState</span>), + <span class='ident'>Array</span>, + <span class='ident'>Root</span>, +} + +<span class='kw'>enum</span> <span class='ident'>DictionaryState</span> { + <span class='ident'>ExpectKey</span>, + <span class='ident'>ExpectValue</span>, +} + +<span class='kw'>pub</span> <span class='kw'>struct</span> <span class='ident'>EventWriter</span><span class='op'><</span><span class='ident'>W</span>: <span class='ident'>Write</span><span class='op'>></span> { + <span class='ident'>xml_writer</span>: <span class='ident'>XmlEventWriter</span><span class='op'><</span><span class='ident'>W</span><span class='op'>></span>, + <span class='ident'>stack</span>: <span class='ident'>Vec</span><span class='op'><</span><span class='ident'>Element</span><span class='op'>></span>, + <span class='comment'>// Not very nice</span> + <span class='ident'>empty_namespace</span>: <span class='ident'>Namespace</span>, +} + +<span class='kw'>impl</span><span class='op'><</span><span class='ident'>W</span>: <span class='ident'>Write</span><span class='op'>></span> <span class='ident'>EventWriter</span><span class='op'><</span><span class='ident'>W</span><span class='op'>></span> { + <span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>new</span>(<span class='ident'>writer</span>: <span class='ident'>W</span>) <span class='op'>-></span> <span class='ident'>EventWriter</span><span class='op'><</span><span class='ident'>W</span><span class='op'>></span> { + <span class='kw'>let</span> <span class='ident'>config</span> <span class='op'>=</span> <span class='ident'>EmitterConfig</span> { + <span class='ident'>line_separator</span>: <span class='string'>"\n"</span>.<span class='ident'>into</span>(), + <span class='ident'>indent_string</span>: <span class='string'>" "</span>.<span class='ident'>into</span>(), + <span class='ident'>perform_indent</span>: <span class='bool-val'>true</span>, + <span class='ident'>perform_escaping</span>: <span class='bool-val'>true</span>, + <span class='ident'>write_document_declaration</span>: <span class='bool-val'>true</span>, + <span class='ident'>normalize_empty_elements</span>: <span class='bool-val'>true</span>, + <span class='ident'>cdata_to_characters</span>: <span class='bool-val'>true</span>, + <span class='ident'>keep_element_names_stack</span>: <span class='bool-val'>false</span>, + <span class='ident'>autopad_comments</span>: <span class='bool-val'>true</span>, + }; + + <span class='ident'>EventWriter</span> { + <span class='ident'>xml_writer</span>: <span class='ident'>XmlEventWriter</span>::<span class='ident'>new_with_config</span>(<span class='ident'>writer</span>, <span class='ident'>config</span>), + <span class='ident'>stack</span>: <span class='ident'>Vec</span>::<span class='ident'>new</span>(), + <span class='ident'>empty_namespace</span>: <span class='ident'>Namespace</span>::<span class='ident'>empty</span>(), + } + } + + <span class='kw'>fn</span> <span class='ident'>write_element_and_value</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>name</span>: <span class='kw-2'>&</span><span class='ident'>str</span>, <span class='ident'>value</span>: <span class='kw-2'>&</span><span class='ident'>str</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>()<span class='op'>></span> { + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>start_element</span>(<span class='ident'>name</span>)); + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>write_value</span>(<span class='ident'>value</span>)); + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>end_element</span>(<span class='ident'>name</span>)); + <span class='prelude-val'>Ok</span>(()) + } + + <span class='kw'>fn</span> <span class='ident'>start_element</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>name</span>: <span class='kw-2'>&</span><span class='ident'>str</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>()<span class='op'>></span> { + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>xml_writer</span>.<span class='ident'>write</span>(<span class='ident'>WriteXmlEvent</span>::<span class='ident'>StartElement</span> { + <span class='ident'>name</span>: <span class='ident'>Name</span>::<span class='ident'>local</span>(<span class='ident'>name</span>), + <span class='ident'>attributes</span>: <span class='ident'>Cow</span>::<span class='ident'>Borrowed</span>(<span class='kw-2'>&</span>[]), + <span class='ident'>namespace</span>: <span class='ident'>Cow</span>::<span class='ident'>Borrowed</span>(<span class='kw-2'>&</span><span class='self'>self</span>.<span class='ident'>empty_namespace</span>), + })); + <span class='prelude-val'>Ok</span>(()) + } + + <span class='kw'>fn</span> <span class='ident'>end_element</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>name</span>: <span class='kw-2'>&</span><span class='ident'>str</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>()<span class='op'>></span> { + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>xml_writer</span>.<span class='ident'>write</span>(<span class='ident'>WriteXmlEvent</span>::<span class='ident'>EndElement</span> { <span class='ident'>name</span>: <span class='prelude-val'>Some</span>(<span class='ident'>Name</span>::<span class='ident'>local</span>(<span class='ident'>name</span>)) })); + <span class='prelude-val'>Ok</span>(()) + } + + <span class='kw'>fn</span> <span class='ident'>write_value</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>value</span>: <span class='kw-2'>&</span><span class='ident'>str</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>()<span class='op'>></span> { + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>xml_writer</span>.<span class='ident'>write</span>(<span class='ident'>WriteXmlEvent</span>::<span class='ident'>Characters</span>(<span class='ident'>value</span>))); + <span class='prelude-val'>Ok</span>(()) + } + + <span class='kw'>fn</span> <span class='ident'>maybe_end_plist</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>()<span class='op'>></span> { + <span class='comment'>// If there are no more open tags then write the </plist> element</span> + <span class='kw'>if</span> <span class='self'>self</span>.<span class='ident'>stack</span>.<span class='ident'>len</span>() <span class='op'>==</span> <span class='number'>1</span> { + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>end_element</span>(<span class='string'>"plist"</span>)); + <span class='kw'>if</span> <span class='kw'>let</span> <span class='prelude-val'>Some</span>(<span class='ident'>Element</span>::<span class='ident'>Root</span>) <span class='op'>=</span> <span class='self'>self</span>.<span class='ident'>stack</span>.<span class='ident'>pop</span>() {} <span class='kw'>else</span> { + <span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>InvalidData</span>); + } + } + <span class='prelude-val'>Ok</span>(()) + } + + <span class='kw'>pub</span> <span class='kw'>fn</span> <span class='ident'>write</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>event</span>: <span class='kw-2'>&</span><span class='ident'>PlistEvent</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>()<span class='op'>></span> { + <span class='op'><</span><span class='self'>Self</span> <span class='kw'>as</span> <span class='ident'>PlistEventWriter</span><span class='op'>></span>::<span class='ident'>write</span>(<span class='self'>self</span>, <span class='ident'>event</span>) + } +} + +<span class='kw'>impl</span><span class='op'><</span><span class='ident'>W</span>: <span class='ident'>Write</span><span class='op'>></span> <span class='ident'>PlistEventWriter</span> <span class='kw'>for</span> <span class='ident'>EventWriter</span><span class='op'><</span><span class='ident'>W</span><span class='op'>></span> { + <span class='kw'>fn</span> <span class='ident'>write</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='self'>self</span>, <span class='ident'>event</span>: <span class='kw-2'>&</span><span class='ident'>PlistEvent</span>) <span class='op'>-></span> <span class='prelude-ty'>Result</span><span class='op'><</span>()<span class='op'>></span> { + <span class='kw'>match</span> <span class='self'>self</span>.<span class='ident'>stack</span>.<span class='ident'>pop</span>() { + <span class='prelude-val'>Some</span>(<span class='ident'>Element</span>::<span class='ident'>Dictionary</span>(<span class='ident'>DictionaryState</span>::<span class='ident'>ExpectKey</span>)) <span class='op'>=></span> { + <span class='kw'>match</span> <span class='op'>*</span><span class='ident'>event</span> { + <span class='ident'>PlistEvent</span>::<span class='ident'>StringValue</span>(<span class='kw-2'>ref</span> <span class='ident'>value</span>) <span class='op'>=></span> { + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>write_element_and_value</span>(<span class='string'>"key"</span>, <span class='kw-2'>&</span><span class='op'>*</span><span class='ident'>value</span>)); + <span class='self'>self</span>.<span class='ident'>stack</span>.<span class='ident'>push</span>(<span class='ident'>Element</span>::<span class='ident'>Dictionary</span>(<span class='ident'>DictionaryState</span>::<span class='ident'>ExpectValue</span>)); + } + <span class='ident'>PlistEvent</span>::<span class='ident'>EndDictionary</span> <span class='op'>=></span> { + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>end_element</span>(<span class='string'>"dict"</span>)); + <span class='comment'>// We might be closing the last tag here as well</span> + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>maybe_end_plist</span>()); + } + _ <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>InvalidData</span>), + }; + <span class='kw'>return</span> <span class='prelude-val'>Ok</span>(()); + } + <span class='prelude-val'>Some</span>(<span class='ident'>Element</span>::<span class='ident'>Dictionary</span>(<span class='ident'>DictionaryState</span>::<span class='ident'>ExpectValue</span>)) <span class='op'>=></span> { + <span class='self'>self</span>.<span class='ident'>stack</span>.<span class='ident'>push</span>(<span class='ident'>Element</span>::<span class='ident'>Dictionary</span>(<span class='ident'>DictionaryState</span>::<span class='ident'>ExpectKey</span>)) + } + <span class='prelude-val'>Some</span>(<span class='ident'>other</span>) <span class='op'>=></span> <span class='self'>self</span>.<span class='ident'>stack</span>.<span class='ident'>push</span>(<span class='ident'>other</span>), + <span class='prelude-val'>None</span> <span class='op'>=></span> { + <span class='kw'>let</span> <span class='ident'>version_name</span> <span class='op'>=</span> <span class='ident'>Name</span>::<span class='ident'>local</span>(<span class='string'>"version"</span>); + <span class='kw'>let</span> <span class='ident'>version_attr</span> <span class='op'>=</span> <span class='ident'>Attribute</span>::<span class='ident'>new</span>(<span class='ident'>version_name</span>, <span class='string'>"1.0"</span>); + + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>xml_writer</span>.<span class='ident'>write</span>(<span class='ident'>WriteXmlEvent</span>::<span class='ident'>StartElement</span> { + <span class='ident'>name</span>: <span class='ident'>Name</span>::<span class='ident'>local</span>(<span class='string'>"plist"</span>), + <span class='ident'>attributes</span>: <span class='ident'>Cow</span>::<span class='ident'>Borrowed</span>(<span class='kw-2'>&</span>[<span class='ident'>version_attr</span>]), + <span class='ident'>namespace</span>: <span class='ident'>Cow</span>::<span class='ident'>Borrowed</span>(<span class='kw-2'>&</span><span class='self'>self</span>.<span class='ident'>empty_namespace</span>), + })); + + <span class='self'>self</span>.<span class='ident'>stack</span>.<span class='ident'>push</span>(<span class='ident'>Element</span>::<span class='ident'>Root</span>); + } + } + + <span class='kw'>match</span> <span class='op'>*</span><span class='ident'>event</span> { + <span class='ident'>PlistEvent</span>::<span class='ident'>StartArray</span>(_) <span class='op'>=></span> { + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>start_element</span>(<span class='string'>"array"</span>)); + <span class='self'>self</span>.<span class='ident'>stack</span>.<span class='ident'>push</span>(<span class='ident'>Element</span>::<span class='ident'>Array</span>); + } + <span class='ident'>PlistEvent</span>::<span class='ident'>EndArray</span> <span class='op'>=></span> { + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>end_element</span>(<span class='string'>"array"</span>)); + <span class='kw'>if</span> <span class='kw'>let</span> <span class='prelude-val'>Some</span>(<span class='ident'>Element</span>::<span class='ident'>Array</span>) <span class='op'>=</span> <span class='self'>self</span>.<span class='ident'>stack</span>.<span class='ident'>pop</span>() {} <span class='kw'>else</span> { + <span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>InvalidData</span>); + } + } + + <span class='ident'>PlistEvent</span>::<span class='ident'>StartDictionary</span>(_) <span class='op'>=></span> { + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>start_element</span>(<span class='string'>"dict"</span>)); + <span class='self'>self</span>.<span class='ident'>stack</span>.<span class='ident'>push</span>(<span class='ident'>Element</span>::<span class='ident'>Dictionary</span>(<span class='ident'>DictionaryState</span>::<span class='ident'>ExpectKey</span>)); + } + <span class='ident'>PlistEvent</span>::<span class='ident'>EndDictionary</span> <span class='op'>=></span> <span class='kw'>return</span> <span class='prelude-val'>Err</span>(<span class='ident'>Error</span>::<span class='ident'>InvalidData</span>), + + <span class='ident'>PlistEvent</span>::<span class='ident'>BooleanValue</span>(<span class='bool-val'>true</span>) <span class='op'>=></span> { + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>start_element</span>(<span class='string'>"true"</span>)); + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>end_element</span>(<span class='string'>"true"</span>)); + } + <span class='ident'>PlistEvent</span>::<span class='ident'>BooleanValue</span>(<span class='bool-val'>false</span>) <span class='op'>=></span> { + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>start_element</span>(<span class='string'>"false"</span>)); + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>end_element</span>(<span class='string'>"false"</span>)); + } + <span class='ident'>PlistEvent</span>::<span class='ident'>DataValue</span>(<span class='kw-2'>ref</span> <span class='ident'>value</span>) <span class='op'>=></span> { + <span class='kw'>let</span> <span class='ident'>base64_data</span> <span class='op'>=</span> <span class='ident'>value</span>.<span class='ident'>to_base64</span>(<span class='ident'>MIME</span>); + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>write_element_and_value</span>(<span class='string'>"data"</span>, <span class='kw-2'>&</span><span class='ident'>base64_data</span>)); + } + <span class='ident'>PlistEvent</span>::<span class='ident'>DateValue</span>(<span class='kw-2'>ref</span> <span class='ident'>value</span>) <span class='op'>=></span> { + <span class='kw'>let</span> <span class='ident'>date</span> <span class='op'>=</span> <span class='macro'>format</span><span class='macro'>!</span>(<span class='string'>"{:?}"</span>, <span class='ident'>value</span>); + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>write_element_and_value</span>(<span class='string'>"date"</span>, <span class='kw-2'>&</span><span class='ident'>date</span>)); + } + <span class='ident'>PlistEvent</span>::<span class='ident'>IntegerValue</span>(<span class='kw-2'>ref</span> <span class='ident'>value</span>) <span class='op'>=></span> { + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>write_element_and_value</span>(<span class='string'>"integer"</span>, <span class='kw-2'>&</span><span class='ident'>value</span>.<span class='ident'>to_string</span>())) + } + <span class='ident'>PlistEvent</span>::<span class='ident'>RealValue</span>(<span class='kw-2'>ref</span> <span class='ident'>value</span>) <span class='op'>=></span> { + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>write_element_and_value</span>(<span class='string'>"real"</span>, <span class='kw-2'>&</span><span class='ident'>value</span>.<span class='ident'>to_string</span>())) + } + <span class='ident'>PlistEvent</span>::<span class='ident'>StringValue</span>(<span class='kw-2'>ref</span> <span class='ident'>value</span>) <span class='op'>=></span> { + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>write_element_and_value</span>(<span class='string'>"string"</span>, <span class='kw-2'>&</span><span class='op'>*</span><span class='ident'>value</span>)) + } + }; + + <span class='macro'>try</span><span class='macro'>!</span>(<span class='self'>self</span>.<span class='ident'>maybe_end_plist</span>()); + + <span class='prelude-val'>Ok</span>(()) + } +} + +<span class='attribute'>#[<span class='ident'>cfg</span>(<span class='ident'>test</span>)]</span> +<span class='kw'>mod</span> <span class='ident'>tests</span> { + <span class='kw'>use</span> <span class='ident'>chrono</span>::{<span class='ident'>TimeZone</span>, <span class='ident'>UTC</span>}; + <span class='kw'>use</span> <span class='ident'>std</span>::<span class='ident'>io</span>::<span class='ident'>Cursor</span>; + + <span class='kw'>use</span> <span class='kw'>super</span>::<span class='op'>*</span>; + + <span class='attribute'>#[<span class='ident'>test</span>]</span> + <span class='kw'>fn</span> <span class='ident'>streaming_parser</span>() { + <span class='kw'>use</span> <span class='ident'>PlistEvent</span>::<span class='op'>*</span>; + + <span class='kw'>let</span> <span class='ident'>plist</span> <span class='op'>=</span> <span class='kw-2'>&</span>[<span class='ident'>StartDictionary</span>(<span class='prelude-val'>None</span>), + <span class='ident'>StringValue</span>(<span class='string'>"Author"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>StringValue</span>(<span class='string'>"William Shakespeare"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>StringValue</span>(<span class='string'>"Lines"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>StartArray</span>(<span class='prelude-val'>None</span>), + <span class='ident'>StringValue</span>(<span class='string'>"It is a tale told by an idiot,"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>StringValue</span>(<span class='string'>"Full of sound and fury, signifying nothing."</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>EndArray</span>, + <span class='ident'>StringValue</span>(<span class='string'>"Death"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>IntegerValue</span>(<span class='number'>1564</span>), + <span class='ident'>StringValue</span>(<span class='string'>"Height"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>RealValue</span>(<span class='number'>1.60</span>), + <span class='ident'>StringValue</span>(<span class='string'>"Data"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>DataValue</span>(<span class='macro'>vec</span><span class='macro'>!</span>[<span class='number'>0</span>, <span class='number'>0</span>, <span class='number'>0</span>, <span class='number'>190</span>, <span class='number'>0</span>, <span class='number'>0</span>, <span class='number'>0</span>, <span class='number'>3</span>, <span class='number'>0</span>, <span class='number'>0</span>, <span class='number'>0</span>, <span class='number'>30</span>, <span class='number'>0</span>, <span class='number'>0</span>, <span class='number'>0</span>]), + <span class='ident'>StringValue</span>(<span class='string'>"Birthdate"</span>.<span class='ident'>to_owned</span>()), + <span class='ident'>DateValue</span>(<span class='ident'>UTC</span>.<span class='ident'>ymd</span>(<span class='number'>1981</span>, <span class='number'>05</span>, <span class='number'>16</span>).<span class='ident'>and_hms</span>(<span class='number'>11</span>, <span class='number'>32</span>, <span class='number'>06</span>)), + <span class='ident'>EndDictionary</span>]; + + <span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>cursor</span> <span class='op'>=</span> <span class='ident'>Cursor</span>::<span class='ident'>new</span>(<span class='ident'>Vec</span>::<span class='ident'>new</span>()); + + { + <span class='kw'>let</span> <span class='kw-2'>mut</span> <span class='ident'>plist_w</span> <span class='op'>=</span> <span class='ident'>EventWriter</span>::<span class='ident'>new</span>(<span class='kw-2'>&</span><span class='kw-2'>mut</span> <span class='ident'>cursor</span>); + + <span class='kw'>for</span> <span class='ident'>item</span> <span class='kw'>in</span> <span class='ident'>plist</span> { + <span class='ident'>plist_w</span>.<span class='ident'>write</span>(<span class='ident'>item</span>).<span class='ident'>unwrap</span>(); + } + } + + <span class='kw'>let</span> <span class='ident'>comparison</span> <span class='op'>=</span> <span class='string'>"<?xml version=\"1.0\" encoding=\"utf-8\"?> +<plist version=\"1.0\"> + <dict> + <key>Author</key> + <string>William Shakespeare</string> + <key>Lines</key> + <array> + <string>It is a tale told by an idiot,</string> + <string>Full of sound and fury, signifying nothing.</string> + </array> + <key>Death</key> + <integer>1564</integer> + <key>Height</key> + <real>1.6</real> + <key>Data</key> + <data>AAAAvgAAAAMAAAAeAAAA</data> + <key>Birthdate</key> + <date>1981-05-16T11:32:06Z</date> + </dict> +</plist>"</span>; + + <span class='kw'>let</span> <span class='ident'>s</span> <span class='op'>=</span> <span class='ident'>String</span>::<span class='ident'>from_utf8</span>(<span class='ident'>cursor</span>.<span class='ident'>into_inner</span>()).<span class='ident'>unwrap</span>(); + + <span class='macro'>assert_eq</span><span class='macro'>!</span>(<span class='ident'>s</span>, <span class='ident'>comparison</span>); + } +} +</pre> +</section> + <section id='search' class="content hidden"></section> + + <section class="footer"></section> + + <aside id="help" class="hidden"> + <div> + <h1 class="hidden">Help</h1> + + <div class="shortcuts"> + <h2>Keyboard Shortcuts</h2> + + <dl> + <dt>?</dt> + <dd>Show this help dialog</dd> + <dt>S</dt> + <dd>Focus the search field</dd> + <dt>⇤</dt> + <dd>Move up in search results</dd> + <dt>⇥</dt> + <dd>Move down in search results</dd> + <dt>⏎</dt> + <dd>Go to active search result</dd> + <dt>+</dt> + <dd>Collapse/expand all sections</dd> + </dl> + </div> + + <div class="infos"> + <h2>Search Tricks</h2> + + <p> + Prefix searches with a type followed by a colon (e.g. + <code>fn:</code>) to restrict the search to a given type. + </p> + + <p> + Accepted types are: <code>fn</code>, <code>mod</code>, + <code>struct</code>, <code>enum</code>, + <code>trait</code>, <code>type</code>, <code>macro</code>, + and <code>const</code>. + </p> + + <p> + Search functions by type signature (e.g. + <code>vec -> usize</code> or <code>* -> vec</code>) + </p> + </div> + </div> + </aside> + + + + <script> + window.rootPath = "../../../../"; + window.currentCrate = "plist"; + </script> + <script src="../../../../jquery.js"></script> + <script src="../../../../main.js"></script> + <script defer src="../../../../search-index.js"></script> +</body> +</html>
\ No newline at end of file |
