diff --git a/.lock b/.lock
new file mode 100755
index 0000000..e69de29
diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt
new file mode 100644
index 0000000..c2629a8
--- /dev/null
+++ b/COPYRIGHT.txt
@@ -0,0 +1,50 @@
+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.woff2, FiraSans-Medium.woff2,
+ 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.
+
+* 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.ttf.woff2,
+ SourceCodePro-Semibold.ttf.woff2, SourceCodePro-It.ttf.woff2,
+ SourceCodePro-Regular.ttf.woff, SourceCodePro-Semibold.ttf.woff,
+ SourceCodePro-It.ttf.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 4 (SourceSerif4-Regular.ttf.woff2, SourceSerif4-Bold.ttf.woff2,
+ SourceSerif4-It.ttf.woff2, SourceSerif4-Regular.ttf.woff,
+ SourceSerif4-Bold.ttf.woff, SourceSerif4-It.ttf.woff):
+
+ Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name
+ 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United
+ States and/or other countries.
+
+ Licensed under the SIL Open Font License, Version 1.1.
+ See SourceSerif4-LICENSE.md.
+
+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..ff9afab
--- /dev/null
+++ b/FiraSans-LICENSE.txt
@@ -0,0 +1,94 @@
+Digitized data copyright (c) 2012-2015, The Mozilla Foundation and Telefonica S.A.
+with Reserved Font Name < Fira >,
+
+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
new file mode 100644
index 0000000..7d742c5
Binary files /dev/null and b/FiraSans-Medium.woff differ
diff --git a/FiraSans-Medium.woff2 b/FiraSans-Medium.woff2
new file mode 100644
index 0000000..7a1e5fc
Binary files /dev/null and b/FiraSans-Medium.woff2 differ
diff --git a/FiraSans-Regular.woff b/FiraSans-Regular.woff
new file mode 100644
index 0000000..d8e0363
Binary files /dev/null and b/FiraSans-Regular.woff differ
diff --git a/FiraSans-Regular.woff2 b/FiraSans-Regular.woff2
new file mode 100644
index 0000000..e766e06
Binary files /dev/null and b/FiraSans-Regular.woff2 differ
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-It.ttf.woff b/SourceCodePro-It.ttf.woff
new file mode 100644
index 0000000..8d68f2f
Binary files /dev/null and b/SourceCodePro-It.ttf.woff differ
diff --git a/SourceCodePro-It.ttf.woff2 b/SourceCodePro-It.ttf.woff2
new file mode 100644
index 0000000..462c34e
Binary files /dev/null and b/SourceCodePro-It.ttf.woff2 differ
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.ttf.woff b/SourceCodePro-Regular.ttf.woff
new file mode 100644
index 0000000..7be076e
Binary files /dev/null and b/SourceCodePro-Regular.ttf.woff differ
diff --git a/SourceCodePro-Regular.ttf.woff2 b/SourceCodePro-Regular.ttf.woff2
new file mode 100644
index 0000000..10b558e
Binary files /dev/null and b/SourceCodePro-Regular.ttf.woff2 differ
diff --git a/SourceCodePro-Semibold.ttf.woff b/SourceCodePro-Semibold.ttf.woff
new file mode 100644
index 0000000..61bc67b
Binary files /dev/null and b/SourceCodePro-Semibold.ttf.woff differ
diff --git a/SourceCodePro-Semibold.ttf.woff2 b/SourceCodePro-Semibold.ttf.woff2
new file mode 100644
index 0000000..5ec64ee
Binary files /dev/null and b/SourceCodePro-Semibold.ttf.woff2 differ
diff --git a/SourceSerif4-Bold.ttf.woff b/SourceSerif4-Bold.ttf.woff
new file mode 100644
index 0000000..8ad4188
Binary files /dev/null and b/SourceSerif4-Bold.ttf.woff differ
diff --git a/SourceSerif4-Bold.ttf.woff2 b/SourceSerif4-Bold.ttf.woff2
new file mode 100644
index 0000000..db57d21
Binary files /dev/null and b/SourceSerif4-Bold.ttf.woff2 differ
diff --git a/SourceSerif4-It.ttf.woff b/SourceSerif4-It.ttf.woff
new file mode 100644
index 0000000..2a34b5c
Binary files /dev/null and b/SourceSerif4-It.ttf.woff differ
diff --git a/SourceSerif4-It.ttf.woff2 b/SourceSerif4-It.ttf.woff2
new file mode 100644
index 0000000..1cbc021
Binary files /dev/null and b/SourceSerif4-It.ttf.woff2 differ
diff --git a/SourceSerif4-LICENSE.md b/SourceSerif4-LICENSE.md
new file mode 100644
index 0000000..68ea189
--- /dev/null
+++ b/SourceSerif4-LICENSE.md
@@ -0,0 +1,93 @@
+Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe 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/SourceSerif4-Regular.ttf.woff b/SourceSerif4-Regular.ttf.woff
new file mode 100644
index 0000000..45a5521
Binary files /dev/null and b/SourceSerif4-Regular.ttf.woff differ
diff --git a/SourceSerif4-Regular.ttf.woff2 b/SourceSerif4-Regular.ttf.woff2
new file mode 100644
index 0000000..2db73fe
Binary files /dev/null and b/SourceSerif4-Regular.ttf.woff2 differ
diff --git a/ayu.css b/ayu.css
new file mode 100644
index 0000000..3444ac5
--- /dev/null
+++ b/ayu.css
@@ -0,0 +1 @@
+ body{background-color:#0f1419;color:#c5c5c5;}h1,h2,h3,h4{color:white;}h1.fqn{border-bottom-color:#5c6773;}h1.fqn a{color:#fff;}h2,h3,h4{border-bottom-color:#5c6773;}h4{border:none;}.in-band{background-color:#0f1419;}.invisible{background:rgba(0,0,0,0);}.docblock code{color:#ffb454;}.code-header{color:#e6e1cf;}.docblock pre>code,pre>code{color:#e6e1cf;}span code{color:#e6e1cf;}.docblock a>code{color:#39AFD7 !important;}.docblock code,.docblock-short code{background-color:#191f26;}pre,.rustdoc.source .example-wrap{color:#e6e1cf;background-color:#191f26;}.sidebar{background-color:#14191f;}.logo-container.rust-logo>img{filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);}*{scrollbar-color:#5c6773 transparent;}.sidebar{scrollbar-color:#5c6773 transparent;}::-webkit-scrollbar-track{background-color:transparent;}::-webkit-scrollbar-thumb{background-color:#5c6773;}.sidebar::-webkit-scrollbar-track{background-color:transparent;}.sidebar::-webkit-scrollbar-thumb{background-color:#5c6773;}.sidebar .current{background-color:transparent;color:#ffb44c;}.source .sidebar{background-color:#0f1419;}.sidebar .location{border-color:#000;background-color:#0f1419;color:#fff;}.sidebar-elems .location{color:#ff7733;}.sidebar-elems .location a{color:#fff;}.sidebar .version{border-bottom-color:#424c57;}.sidebar-title{border-top-color:#5c6773;border-bottom-color:#5c6773;}.block a:hover{background:transparent;color:#ffb44c;}.line-numbers span{color:#5c6773;}.line-numbers .line-highlighted{color:#708090;background-color:rgba(255,236,164,0.06);padding-right:4px;border-right:1px solid #ffb44c;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5{border-bottom-color:#5c6773;}.docblock table td,.docblock table th{border-color:#5c6773;}.content .method .where,.content .fn .where,.content .where.fmt-newline{color:#c5c5c5;}.search-results a:hover{background-color:#777;}.search-results a:focus{color:#000 !important;background-color:#c6afb3;}.search-results a{color:#0096cf;}.search-results a div.desc{color:#c5c5c5;}.content .item-info::before{color:#ccc;}.content span.foreigntype,.content a.foreigntype{color:#ef57ff;}.content span.union,.content a.union{color:#98a01c;}.content span.constant,.content a.constant,.content span.static,.content a.static{color:#6380a0;}.content span.primitive,.content a.primitive{color:#32889b;}.content span.traitalias,.content a.traitalias{color:#57d399;}.content span.keyword,.content a.keyword{color:#de5249;}.content span.externcrate,.content span.mod,.content a.mod{color:#acccf9;}.content span.struct,.content a.struct{color:#ffa0a5;}.content span.enum,.content a.enum{color:#99e0c9;}.content span.trait,.content a.trait{color:#39AFD7;}.content span.type,.content a.type{color:#cfbcf5;}.content span.fn,.content a.fn,.content span.method,.content a.method,.content span.tymethod,.content a.tymethod,.content .fnname{color:#fdd687;}.content span.attr,.content a.attr,.content span.derive,.content a.derive,.content span.macro,.content a.macro{color:#a37acc;}pre.rust .comment{color:#788797;}pre.rust .doccomment{color:#a1ac88;}nav:not(.sidebar){border-bottom-color:#424c57;}nav.main .current{border-top-color:#5c6773;border-bottom-color:#5c6773;}nav.main .separator{border:1px solid #5c6773;}a{color:#c5c5c5;}body.source .example-wrap pre.rust a{background:#c5c5c5;}.docblock:not(.type-decl) a:not(.srclink):not(.test-arrow),.docblock-short a:not(.srclink):not(.test-arrow),.item-info a,#help a{color:#39AFD7;}details.rustdoc-toggle>summary.hideme>span,details.rustdoc-toggle>summary::before,details.undocumented>summary::before{color:#999;}details.rustdoc-toggle>summary::before,details.undocumented>summary::before{filter:invert(100%);}#crate-search{color:#c5c5c5;background-color:#141920;box-shadow:0 0 0 1px #424c57,0 0 0 2px transparent;border-color:#424c57;}.search-input{color:#ffffff;background-color:#141920;box-shadow:0 0 0 1px #424c57,0 0 0 2px transparent;transition:box-shadow 150ms ease-in-out;}#crate-search+.search-input:focus{box-shadow:0 0 0 1px #148099,0 0 0 2px transparent;}.search-input:disabled{background-color:#3e3e3e;}.module-item .stab,.import-item .stab{color:#000;}.stab.unstable,.stab.deprecated,.stab.portability{color:#c5c5c5;background:#314559 !important;border-style:none !important;border-radius:4px;padding:3px 6px 3px 6px;}.stab.portability>code{color:#e6e1cf;background:none;}#help>div{background:#14191f;box-shadow:0px 6px 20px 0px black;border:none;border-radius:4px;}#help>div>span{border-bottom-color:#5c6773;}.since{color:grey;}.result-name .primitive>i,.result-name .keyword>i{color:#788797;}.line-numbers :target{background-color:transparent;}pre.rust .number,pre.rust .string{color:#b8cc52;}pre.rust .kw,pre.rust .kw-2,pre.rust .prelude-ty,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .op,pre.rust .lifetime{color:#ff7733;}pre.rust .macro,pre.rust .macro-nonterminal{color:#a37acc;}pre.rust .question-mark{color:#ff9011;}pre.rust .self{color:#36a3d9;font-style:italic;}pre.rust .attribute{color:#e6e1cf;}pre.rust .attribute .ident,pre.rust .attribute .op{color:#e6e1cf;}.example-wrap>pre.line-number{color:#5c67736e;border:none;}a.test-arrow{font-size:100%;color:#788797;border-radius:4px;background-color:rgba(57,175,215,0.09);}a.test-arrow:hover{background-color:rgba(57,175,215,0.368);color:#c5c5c5;}.toggle-label,.code-attribute{color:#999;}:target,:target>*{background:rgba(255,236,164,0.06);}:target{border-right:3px solid rgba(255,180,76,0.85);}pre.compile_fail{border-left:2px solid rgba(255,0,0,.4);}pre.compile_fail:hover,.information:hover+pre.compile_fail{border-left:2px solid #f00;}pre.should_panic{border-left:2px solid rgba(255,0,0,.4);}pre.should_panic:hover,.information:hover+pre.should_panic{border-left:2px solid #f00;}pre.ignore{border-left:2px solid rgba(255,142,0,.6);}pre.ignore:hover,.information:hover+pre.ignore{border-left:2px solid #ff9200;}.tooltip.compile_fail{color:rgba(255,0,0,.5);}.information>.compile_fail:hover{color:#f00;}.tooltip.should_panic{color:rgba(255,0,0,.5);}.information>.should_panic:hover{color:#f00;}.tooltip.ignore{color:rgba(255,142,0,.6);}.information>.ignore:hover{color:#ff9200;}.search-failed a{color:#39AFD7;}.tooltip::after{background-color:#314559;color:#c5c5c5;border:1px solid #5c6773;}.tooltip::before{border-color:transparent #314559 transparent transparent;}.notable-traits-tooltiptext{background-color:#314559;border-color:#5c6773;}.notable-traits-tooltiptext .notable{border-bottom-color:#5c6773;}#titles>button.selected{background-color:#141920 !important;border-bottom:1px solid #ffb44c !important;border-top:none;}#titles>button:not(.selected){background-color:transparent !important;border:none;}#titles>button:hover{border-bottom:1px solid rgba(242,151,24,0.3);}#titles>button>div.count{color:#888;}.search-input:focus{}.content span.attr,.content a.attr,.block a.current.attr,.content span.derive,.content a.derive,.block a.current.derive,.content span.macro,.content a.macro,.block a.current.macro{}.content span.struct,.content a.struct,.block a.current.struct{}#titles>button:hover,#titles>button.selected{}.content span.type,.content a.type,.block a.current.type{}.content span.union,.content a.union,.block a.current.union{}pre.rust .lifetime{}.stab.unstable{}h2,h3:not(.impl):not(.method):not(.type):not(.tymethod),h4:not(.method):not(.type):not(.tymethod){}.content span.enum,.content a.enum,.block a.current.enum{}.content span.constant,.content a.constant,.block a.current.constant,.content span.static,.content a.static,.block a.current.static{}.content span.keyword,.content a.keyword,.block a.current.keyword{}pre.rust .comment{}.content span.traitalias,.content a.traitalias,.block a.current.traitalias{}.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{}pre.rust .kw{}pre.rust .self,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .attribute,pre.rust .attribute .ident{}.content span.foreigntype,.content a.foreigntype,.block a.current.foreigntype{}pre.rust .doccomment{}.stab.deprecated{}.content a.attr,.content a.derive,.content a.macro{}.stab.portability{}.content span.primitive,.content a.primitive,.block a.current.primitive{}.content span.externcrate,.content span.mod,.content a.mod,.block a.current.mod{}pre.rust .kw-2,pre.rust .prelude-ty{}.content span.trait,.content a.trait,.block a.current.trait{}.search-results a:focus span{}a.result-trait:focus{}a.result-traitalias:focus{}a.result-mod:focus,a.result-externcrate:focus{}a.result-mod:focus{}a.result-externcrate:focus{}a.result-enum:focus{}a.result-struct:focus{}a.result-union:focus{}a.result-fn:focus,a.result-method:focus,a.result-tymethod:focus{}a.result-type:focus{}a.result-foreigntype:focus{}a.result-attr:focus,a.result-derive:focus,a.result-macro:focus{}a.result-constant:focus,a.result-static:focus{}a.result-primitive:focus{}a.result-keyword:focus{}@media (max-width:700px){.sidebar-menu{background-color:#14191f;border-bottom-color:#5c6773;border-right-color:#5c6773;}.sidebar-elems{background-color:#14191f;border-right-color:#5c6773;}#sidebar-filler{background-color:#14191f;border-bottom-color:#5c6773;}}kbd{color:#c5c5c5;background-color:#314559;border-color:#5c6773;border-bottom-color:#5c6773;box-shadow-color:#c6cbd1;}#theme-picker,#settings-menu,#help-button{border-color:#5c6773;background-color:#0f1419;color:#fff;}#theme-picker>img,#settings-menu>img{filter:invert(100);}#copy-path{color:#fff;}#copy-path>img{filter:invert(70%);}#copy-path:hover>img{filter:invert(100%);}#theme-picker:hover,#theme-picker:focus,#settings-menu:hover,#settings-menu:focus,#help-button:hover,#help-button:focus{border-color:#e0e0e0;}#theme-choices{border-color:#5c6773;background-color:#0f1419;}#theme-choices>button:not(:first-child){border-top-color:#5c6773;}#theme-choices>button:hover,#theme-choices>button:focus{background-color:rgba(110,110,110,0.33);}@media (max-width:700px){#theme-picker{background:#0f1419;}}#all-types{background-color:#14191f;}#all-types:hover{background-color:rgba(70,70,70,0.33);}.search-results .result-name span.alias{color:#c5c5c5;}.search-results .result-name span.grey{color:#999;}#sidebar-toggle{background-color:#14191f;}#sidebar-toggle:hover{background-color:rgba(70,70,70,0.33);}#source-sidebar{background-color:#14191f;}#source-sidebar>.title{color:#fff;border-bottom-color:#5c6773;}div.files>a:hover,div.name:hover{background-color:#14191f;color:#ffb44c;}div.files>.selected{background-color:#14191f;color:#ffb44c;}.setting-line>.title{border-bottom-color:#5c6773;}input:checked+.slider{background-color:#ffb454 !important;}
\ No newline at end of file
diff --git a/brush.svg b/brush.svg
new file mode 100644
index 0000000..ea266e8
--- /dev/null
+++ b/brush.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/clipboard.svg b/clipboard.svg
new file mode 100644
index 0000000..8adbd99
--- /dev/null
+++ b/clipboard.svg
@@ -0,0 +1 @@
+
diff --git a/crates.js b/crates.js
new file mode 100644
index 0000000..a2284e4
--- /dev/null
+++ b/crates.js
@@ -0,0 +1 @@
+window.ALL_CRATES = ["libmedium"];
\ No newline at end of file
diff --git a/dark.css b/dark.css
new file mode 100644
index 0000000..5787fd1
--- /dev/null
+++ b/dark.css
@@ -0,0 +1 @@
+body{background-color:#353535;color:#ddd;}h1,h2,h3,h4{color:#ddd;}h1.fqn{border-bottom-color:#d2d2d2;}h2,h3,h4{border-bottom-color:#d2d2d2;}.in-band{background-color:#353535;}.invisible{background:rgba(0,0,0,0);}.docblock code,.docblock-short code{background-color:#2A2A2A;}pre,.rustdoc.source .example-wrap{background-color:#2A2A2A;}.sidebar{background-color:#505050;}.logo-container.rust-logo>img{filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff)}*{scrollbar-color:rgb(64,65,67) #717171;}.sidebar{scrollbar-color:rgba(32,34,37,.6) transparent;}::-webkit-scrollbar-track{background-color:#717171;}::-webkit-scrollbar-thumb{background-color:rgba(32,34,37,.6);}.sidebar::-webkit-scrollbar-track{background-color:#717171;}.sidebar::-webkit-scrollbar-thumb{background-color:rgba(32,34,37,.6);}.sidebar .current{background-color:#333;}.source .sidebar{background-color:#353535;}.sidebar .location{border-color:#fff;background:#575757;color:#DDD;}.sidebar .version{border-bottom-color:#DDD;}.sidebar-title{border-top-color:#777;border-bottom-color:#777;}.block a:hover{background:#444;}.line-numbers span{color:#3B91E2;}.line-numbers .line-highlighted{background-color:#0a042f !important;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5{border-bottom-color:#DDD;}.docblock table td,.docblock table th{border-color:#ddd;}.content .method .where,.content .fn .where,.content .where.fmt-newline{color:#ddd;}.search-results a:hover{background-color:#777;}.search-results a:focus{color:#eee !important;background-color:#616161;}.search-results a:focus span{color:#eee !important;}a.result-trait:focus{background-color:#013191;}a.result-traitalias:focus{background-color:#013191;}a.result-mod:focus,a.result-externcrate:focus{background-color:#afc6e4;}a.result-mod:focus{background-color:#803a1b;}a.result-externcrate:focus{background-color:#396bac;}a.result-enum:focus{background-color:#5b4e68;}a.result-struct:focus{background-color:#194e9f;}a.result-union:focus{background-color:#b7bd49;}a.result-fn:focus,a.result-method:focus,a.result-tymethod:focus{background-color:#4950ed;}a.result-type:focus{background-color:#38902c;}a.result-foreigntype:focus{background-color:#b200d6;}a.result-attr:focus,a.result-derive:focus,a.result-macro:focus{background-color:#217d1c;}a.result-constant:focus,a.result-static:focus{background-color:#0063cc;}a.result-primitive:focus{background-color:#00708a;}a.result-keyword:focus{background-color:#884719;}.content .item-info::before{color:#ccc;}.content span.enum,.content a.enum,.block a.current.enum{color:#82b089;}.content span.struct,.content a.struct,.block a.current.struct{color:#2dbfb8;}.content span.type,.content a.type,.block a.current.type{color:#ff7f00;}.content span.foreigntype,.content a.foreigntype,.block a.current.foreigntype{color:#dd7de8;}.content span.attr,.content a.attr,.block a.current.attr,.content span.derive,.content a.derive,.block a.current.derive,.content span.macro,.content a.macro,.block a.current.macro{color:#09bd00;}.content span.union,.content a.union,.block a.current.union{color:#a6ae37;}.content span.constant,.content a.constant,.block a.current.constant,.content span.static,.content a.static,.block a.current.static{color:#82a5c9;}.content span.primitive,.content a.primitive,.block a.current.primitive{color:#43aec7;}.content span.externcrate,.content span.mod,.content a.mod,.block a.current.mod{color:#bda000;}.content span.trait,.content a.trait,.block a.current.trait{color:#b78cf2;}.content span.traitalias,.content a.traitalias,.block a.current.traitalias{color:#b397da;}.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:#2BAB63;}.content span.keyword,.content a.keyword,.block a.current.keyword{color:#de5249;}pre.rust .comment{color:#8d8d8b;}pre.rust .doccomment{color:#8ca375;}nav:not(.sidebar){border-bottom-color:#4e4e4e;}nav.main .current{border-top-color:#eee;border-bottom-color:#eee;}nav.main .separator{border-color:#eee;}a{color:#ddd;}body.source .example-wrap pre.rust a{background:#333;}.docblock:not(.type-decl) a:not(.srclink):not(.test-arrow),.docblock-short a:not(.srclink):not(.test-arrow),.item-info a,#help a{color:#D2991D;}a.test-arrow{color:#dedede;}details.rustdoc-toggle>summary.hideme>span,details.rustdoc-toggle>summary::before,details.undocumented>summary::before{color:#999;}details.rustdoc-toggle>summary::before,details.undocumented>summary::before{filter:invert(100%);}#crate-search{color:#111;background-color:#f0f0f0;border-color:#000;box-shadow:0 0 0 1px #000,0 0 0 2px transparent;}.search-input{color:#111;background-color:#f0f0f0;box-shadow:0 0 0 1px #000,0 0 0 2px transparent;}.search-input:focus{border-color:#008dfd;}.search-input:disabled{background-color:#c5c4c4;}#crate-search+.search-input:focus{box-shadow:0 0 8px 4px #078dd8;}.module-item .stab,.import-item .stab{color:#ddd;}.stab.unstable{background:#FFF5D6;border-color:#FFC600;color:#2f2f2f;}.stab.deprecated{background:#ffc4c4;border-color:#db7b7b;color:#2f2f2f;}.stab.portability{background:#F3DFFF;border-color:#b07bdb;color:#2f2f2f;}.stab.portability>code{background:none;}#help>div{background:#4d4d4d;border-color:#bfbfbf;}#help>div>span{border-bottom-color:#bfbfbf;}#help dt{border-color:#bfbfbf;background:rgba(0,0,0,0);}.since{color:grey;}.result-name .primitive>i,.result-name .keyword>i{color:#ddd;}.line-numbers :target{background-color:transparent;}pre.rust .kw{color:#ab8ac1;}pre.rust .kw-2,pre.rust .prelude-ty{color:#769acb;}pre.rust .number,pre.rust .string{color:#83a300;}pre.rust .self,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .attribute,pre.rust .attribute .ident{color:#ee6868;}pre.rust .macro,pre.rust .macro-nonterminal{color:#3E999F;}pre.rust .lifetime{color:#d97f26;}pre.rust .question-mark{color:#ff9011;}.example-wrap>pre.line-number{border-color:#4a4949;}a.test-arrow{background-color:rgba(78,139,202,0.2);}a.test-arrow:hover{background-color:#4e8bca;}.toggle-label,.code-attribute{color:#999;}:target,:target>*{background-color:#494a3d;}:target{border-right:3px solid #bb7410;}pre.compile_fail{border-left:2px solid rgba(255,0,0,.8);}pre.compile_fail:hover,.information:hover+pre.compile_fail{border-left:2px solid #f00;}pre.should_panic{border-left:2px solid rgba(255,0,0,.8);}pre.should_panic:hover,.information:hover+pre.should_panic{border-left:2px solid #f00;}pre.ignore{border-left:2px solid rgba(255,142,0,.6);}pre.ignore:hover,.information:hover+pre.ignore{border-left:2px solid #ff9200;}.tooltip.compile_fail{color:rgba(255,0,0,.8);}.information>.compile_fail:hover{color:#f00;}.tooltip.should_panic{color:rgba(255,0,0,.8);}.information>.should_panic:hover{color:#f00;}.tooltip.ignore{color:rgba(255,142,0,.6);}.information>.ignore:hover{color:#ff9200;}.search-failed a{color:#0089ff;}.tooltip::after{background-color:#000;color:#fff;border-color:#000;}.tooltip::before{border-color:transparent black transparent transparent;}.notable-traits-tooltiptext{background-color:#111;border-color:#777;}.notable-traits-tooltiptext .notable{border-bottom-color:#d2d2d2;}#titles>button:not(.selected){background-color:#252525;border-top-color:#252525;}#titles>button:hover,#titles>button.selected{border-top-color:#0089ff;background-color:#353535;}#titles>button>div.count{color:#888;}@media (max-width:700px){.sidebar-menu{background-color:#505050;border-bottom-color:#e0e0e0;border-right-color:#e0e0e0;}.sidebar-elems{background-color:#505050;border-right-color:#000;}#sidebar-filler{background-color:#505050;border-bottom-color:#e0e0e0;}}kbd{color:#000;background-color:#fafbfc;border-color:#d1d5da;border-bottom-color:#c6cbd1;box-shadow-color:#c6cbd1;}#theme-picker,#settings-menu,#help-button{border-color:#e0e0e0;background:#f0f0f0;color:#000;}#theme-picker:hover,#theme-picker:focus,#settings-menu:hover,#settings-menu:focus,#help-button:hover,#help-button:focus{border-color:#ffb900;}#copy-path{color:#999;}#copy-path>img{filter:invert(50%);}#copy-path:hover>img{filter:invert(65%);}#theme-choices{border-color:#e0e0e0;background-color:#353535;}#theme-choices>button:not(:first-child){border-top-color:#e0e0e0;}#theme-choices>button:hover,#theme-choices>button:focus{background-color:#4e4e4e;}@media (max-width:700px){#theme-picker{background:#f0f0f0;}}#all-types{background-color:#505050;}#all-types:hover{background-color:#606060;}.search-results .result-name span.alias{color:#fff;}.search-results .result-name span.grey{color:#ccc;}#sidebar-toggle{background-color:#565656;}#sidebar-toggle:hover{background-color:#676767;}#source-sidebar{background-color:#565656;}#source-sidebar>.title{border-bottom-color:#ccc;}div.files>a:hover,div.name:hover{background-color:#444;}div.files>.selected{background-color:#333;}.setting-line>.title{border-bottom-color:#ddd;}
\ No newline at end of file
diff --git a/down-arrow.svg b/down-arrow.svg
new file mode 100644
index 0000000..35437e7
--- /dev/null
+++ b/down-arrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/favicon-16x16.png b/favicon-16x16.png
new file mode 100644
index 0000000..7cfe6c1
Binary files /dev/null and b/favicon-16x16.png differ
diff --git a/favicon-32x32.png b/favicon-32x32.png
new file mode 100644
index 0000000..5109c1d
Binary files /dev/null and b/favicon-32x32.png differ
diff --git a/favicon.svg b/favicon.svg
new file mode 100644
index 0000000..8b34b51
--- /dev/null
+++ b/favicon.svg
@@ -0,0 +1,24 @@
+
diff --git a/implementors/actix_web/service/trait.HttpServiceFactory.js b/implementors/actix_web/service/trait.HttpServiceFactory.js
new file mode 100644
index 0000000..396614e
--- /dev/null
+++ b/implementors/actix_web/service/trait.HttpServiceFactory.js
@@ -0,0 +1,3 @@
+(function() {var implementors = {};
+implementors["libmedium"] = [{"text":"impl HttpServiceFactory for build_details","synthetic":false,"types":["libmedium::meta::build_details"]},{"text":"impl HttpServiceFactory for page","synthetic":false,"types":["libmedium::proxy::page"]}];
+if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/implementors/core/clone/trait.Clone.js b/implementors/core/clone/trait.Clone.js
new file mode 100644
index 0000000..5b095f2
--- /dev/null
+++ b/implementors/core/clone/trait.Clone.js
@@ -0,0 +1,3 @@
+(function() {var implementors = {};
+implementors["libmedium"] = [{"text":"impl Clone for Data","synthetic":false,"types":["libmedium::data::Data"]},{"text":"impl Clone for BuildDetails","synthetic":false,"types":["libmedium::meta::BuildDetails"]},{"text":"impl Clone for Server","synthetic":false,"types":["libmedium::settings::Server"]},{"text":"impl Clone for Settings","synthetic":false,"types":["libmedium::settings::Settings"]}];
+if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/implementors/core/fmt/trait.Debug.js b/implementors/core/fmt/trait.Debug.js
new file mode 100644
index 0000000..80eeb59
--- /dev/null
+++ b/implementors/core/fmt/trait.Debug.js
@@ -0,0 +1,3 @@
+(function() {var implementors = {};
+implementors["libmedium"] = [{"text":"impl Debug for BuildDetails","synthetic":false,"types":["libmedium::meta::BuildDetails"]},{"text":"impl Debug for ResponseData","synthetic":false,"types":["libmedium::proxy::get_post::ResponseData"]},{"text":"impl Debug for GetPostPost","synthetic":false,"types":["libmedium::proxy::get_post::GetPostPost"]},{"text":"impl Debug for GetPostPostCreator","synthetic":false,"types":["libmedium::proxy::get_post::GetPostPostCreator"]},{"text":"impl Debug for GetPostPostContent","synthetic":false,"types":["libmedium::proxy::get_post::GetPostPostContent"]},{"text":"impl Debug for GetPostPostContentBodyModel","synthetic":false,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModel"]},{"text":"impl Debug for GetPostPostContentBodyModelParagraphs","synthetic":false,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphs"]},{"text":"impl Debug for GetPostPostContentBodyModelParagraphsMarkups","synthetic":false,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsMarkups"]},{"text":"impl Debug for GetPostPostContentBodyModelParagraphsIframe","synthetic":false,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsIframe"]},{"text":"impl Debug for GetPostPostContentBodyModelParagraphsIframeMediaResource","synthetic":false,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsIframeMediaResource"]},{"text":"impl Debug for GetPostPostContentBodyModelParagraphsMetadata","synthetic":false,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsMetadata"]},{"text":"impl Debug for Server","synthetic":false,"types":["libmedium::settings::Server"]},{"text":"impl Debug for Settings","synthetic":false,"types":["libmedium::settings::Settings"]}];
+if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/implementors/core/marker/trait.Freeze.js b/implementors/core/marker/trait.Freeze.js
new file mode 100644
index 0000000..4fb1c6b
--- /dev/null
+++ b/implementors/core/marker/trait.Freeze.js
@@ -0,0 +1,3 @@
+(function() {var implementors = {};
+implementors["libmedium"] = [{"text":"impl Freeze for Data","synthetic":true,"types":["libmedium::data::Data"]},{"text":"impl Freeze for Meta","synthetic":true,"types":["libmedium::meta::routes::Meta"]},{"text":"impl Freeze for BuildDetails","synthetic":true,"types":["libmedium::meta::BuildDetails"]},{"text":"impl Freeze for build_details","synthetic":true,"types":["libmedium::meta::build_details"]},{"text":"impl Freeze for Proxy","synthetic":true,"types":["libmedium::proxy::routes::Proxy"]},{"text":"impl Freeze for Variables","synthetic":true,"types":["libmedium::proxy::get_post::Variables"]},{"text":"impl Freeze for ResponseData","synthetic":true,"types":["libmedium::proxy::get_post::ResponseData"]},{"text":"impl Freeze for GetPostPost","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPost"]},{"text":"impl Freeze for GetPostPostCreator","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostCreator"]},{"text":"impl Freeze for GetPostPostContent","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContent"]},{"text":"impl Freeze for GetPostPostContentBodyModel","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModel"]},{"text":"impl Freeze for GetPostPostContentBodyModelParagraphs","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphs"]},{"text":"impl Freeze for GetPostPostContentBodyModelParagraphsMarkups","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsMarkups"]},{"text":"impl Freeze for GetPostPostContentBodyModelParagraphsIframe","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsIframe"]},{"text":"impl Freeze for GetPostPostContentBodyModelParagraphsIframeMediaResource","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsIframeMediaResource"]},{"text":"impl Freeze for GetPostPostContentBodyModelParagraphsMetadata","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsMetadata"]},{"text":"impl Freeze for GetPost","synthetic":true,"types":["libmedium::proxy::GetPost"]},{"text":"impl Freeze for Post","synthetic":true,"types":["libmedium::proxy::Post"]},{"text":"impl Freeze for page","synthetic":true,"types":["libmedium::proxy::page"]},{"text":"impl Freeze for Routes","synthetic":true,"types":["libmedium::routes::Routes"]},{"text":"impl Freeze for Server","synthetic":true,"types":["libmedium::settings::Server"]},{"text":"impl Freeze for Settings","synthetic":true,"types":["libmedium::settings::Settings"]},{"text":"impl Freeze for SETTINGS","synthetic":true,"types":["libmedium::SETTINGS"]}];
+if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/implementors/core/marker/trait.Send.js b/implementors/core/marker/trait.Send.js
new file mode 100644
index 0000000..b73e8e9
--- /dev/null
+++ b/implementors/core/marker/trait.Send.js
@@ -0,0 +1,3 @@
+(function() {var implementors = {};
+implementors["libmedium"] = [{"text":"impl Send for Data","synthetic":true,"types":["libmedium::data::Data"]},{"text":"impl Send for Meta","synthetic":true,"types":["libmedium::meta::routes::Meta"]},{"text":"impl Send for BuildDetails","synthetic":true,"types":["libmedium::meta::BuildDetails"]},{"text":"impl Send for build_details","synthetic":true,"types":["libmedium::meta::build_details"]},{"text":"impl Send for Proxy","synthetic":true,"types":["libmedium::proxy::routes::Proxy"]},{"text":"impl Send for Variables","synthetic":true,"types":["libmedium::proxy::get_post::Variables"]},{"text":"impl Send for ResponseData","synthetic":true,"types":["libmedium::proxy::get_post::ResponseData"]},{"text":"impl Send for GetPostPost","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPost"]},{"text":"impl Send for GetPostPostCreator","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostCreator"]},{"text":"impl Send for GetPostPostContent","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContent"]},{"text":"impl Send for GetPostPostContentBodyModel","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModel"]},{"text":"impl Send for GetPostPostContentBodyModelParagraphs","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphs"]},{"text":"impl Send for GetPostPostContentBodyModelParagraphsMarkups","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsMarkups"]},{"text":"impl Send for GetPostPostContentBodyModelParagraphsIframe","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsIframe"]},{"text":"impl Send for GetPostPostContentBodyModelParagraphsIframeMediaResource","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsIframeMediaResource"]},{"text":"impl Send for GetPostPostContentBodyModelParagraphsMetadata","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsMetadata"]},{"text":"impl Send for GetPost","synthetic":true,"types":["libmedium::proxy::GetPost"]},{"text":"impl Send for Post","synthetic":true,"types":["libmedium::proxy::Post"]},{"text":"impl Send for page","synthetic":true,"types":["libmedium::proxy::page"]},{"text":"impl Send for Routes","synthetic":true,"types":["libmedium::routes::Routes"]},{"text":"impl Send for Server","synthetic":true,"types":["libmedium::settings::Server"]},{"text":"impl Send for Settings","synthetic":true,"types":["libmedium::settings::Settings"]},{"text":"impl Send for SETTINGS","synthetic":true,"types":["libmedium::SETTINGS"]}];
+if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/implementors/core/marker/trait.Sync.js b/implementors/core/marker/trait.Sync.js
new file mode 100644
index 0000000..e231ab4
--- /dev/null
+++ b/implementors/core/marker/trait.Sync.js
@@ -0,0 +1,3 @@
+(function() {var implementors = {};
+implementors["libmedium"] = [{"text":"impl Sync for Data","synthetic":true,"types":["libmedium::data::Data"]},{"text":"impl Sync for Meta","synthetic":true,"types":["libmedium::meta::routes::Meta"]},{"text":"impl Sync for BuildDetails","synthetic":true,"types":["libmedium::meta::BuildDetails"]},{"text":"impl Sync for build_details","synthetic":true,"types":["libmedium::meta::build_details"]},{"text":"impl Sync for Proxy","synthetic":true,"types":["libmedium::proxy::routes::Proxy"]},{"text":"impl Sync for Variables","synthetic":true,"types":["libmedium::proxy::get_post::Variables"]},{"text":"impl Sync for ResponseData","synthetic":true,"types":["libmedium::proxy::get_post::ResponseData"]},{"text":"impl Sync for GetPostPost","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPost"]},{"text":"impl Sync for GetPostPostCreator","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostCreator"]},{"text":"impl Sync for GetPostPostContent","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContent"]},{"text":"impl Sync for GetPostPostContentBodyModel","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModel"]},{"text":"impl Sync for GetPostPostContentBodyModelParagraphs","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphs"]},{"text":"impl Sync for GetPostPostContentBodyModelParagraphsMarkups","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsMarkups"]},{"text":"impl Sync for GetPostPostContentBodyModelParagraphsIframe","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsIframe"]},{"text":"impl Sync for GetPostPostContentBodyModelParagraphsIframeMediaResource","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsIframeMediaResource"]},{"text":"impl Sync for GetPostPostContentBodyModelParagraphsMetadata","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsMetadata"]},{"text":"impl Sync for GetPost","synthetic":true,"types":["libmedium::proxy::GetPost"]},{"text":"impl Sync for Post","synthetic":true,"types":["libmedium::proxy::Post"]},{"text":"impl Sync for page","synthetic":true,"types":["libmedium::proxy::page"]},{"text":"impl Sync for Routes","synthetic":true,"types":["libmedium::routes::Routes"]},{"text":"impl Sync for Server","synthetic":true,"types":["libmedium::settings::Server"]},{"text":"impl Sync for Settings","synthetic":true,"types":["libmedium::settings::Settings"]},{"text":"impl Sync for SETTINGS","synthetic":true,"types":["libmedium::SETTINGS"]}];
+if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/implementors/core/marker/trait.Unpin.js b/implementors/core/marker/trait.Unpin.js
new file mode 100644
index 0000000..2472ad6
--- /dev/null
+++ b/implementors/core/marker/trait.Unpin.js
@@ -0,0 +1,3 @@
+(function() {var implementors = {};
+implementors["libmedium"] = [{"text":"impl Unpin for Data","synthetic":true,"types":["libmedium::data::Data"]},{"text":"impl Unpin for Meta","synthetic":true,"types":["libmedium::meta::routes::Meta"]},{"text":"impl Unpin for BuildDetails","synthetic":true,"types":["libmedium::meta::BuildDetails"]},{"text":"impl Unpin for build_details","synthetic":true,"types":["libmedium::meta::build_details"]},{"text":"impl Unpin for Proxy","synthetic":true,"types":["libmedium::proxy::routes::Proxy"]},{"text":"impl Unpin for Variables","synthetic":true,"types":["libmedium::proxy::get_post::Variables"]},{"text":"impl Unpin for ResponseData","synthetic":true,"types":["libmedium::proxy::get_post::ResponseData"]},{"text":"impl Unpin for GetPostPost","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPost"]},{"text":"impl Unpin for GetPostPostCreator","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostCreator"]},{"text":"impl Unpin for GetPostPostContent","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContent"]},{"text":"impl Unpin for GetPostPostContentBodyModel","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModel"]},{"text":"impl Unpin for GetPostPostContentBodyModelParagraphs","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphs"]},{"text":"impl Unpin for GetPostPostContentBodyModelParagraphsMarkups","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsMarkups"]},{"text":"impl Unpin for GetPostPostContentBodyModelParagraphsIframe","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsIframe"]},{"text":"impl Unpin for GetPostPostContentBodyModelParagraphsIframeMediaResource","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsIframeMediaResource"]},{"text":"impl Unpin for GetPostPostContentBodyModelParagraphsMetadata","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsMetadata"]},{"text":"impl Unpin for GetPost","synthetic":true,"types":["libmedium::proxy::GetPost"]},{"text":"impl Unpin for Post","synthetic":true,"types":["libmedium::proxy::Post"]},{"text":"impl Unpin for page","synthetic":true,"types":["libmedium::proxy::page"]},{"text":"impl Unpin for Routes","synthetic":true,"types":["libmedium::routes::Routes"]},{"text":"impl Unpin for Server","synthetic":true,"types":["libmedium::settings::Server"]},{"text":"impl Unpin for Settings","synthetic":true,"types":["libmedium::settings::Settings"]},{"text":"impl Unpin for SETTINGS","synthetic":true,"types":["libmedium::SETTINGS"]}];
+if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/implementors/core/ops/deref/trait.Deref.js b/implementors/core/ops/deref/trait.Deref.js
new file mode 100644
index 0000000..9d7c20e
--- /dev/null
+++ b/implementors/core/ops/deref/trait.Deref.js
@@ -0,0 +1,3 @@
+(function() {var implementors = {};
+implementors["libmedium"] = [{"text":"impl Deref for SETTINGS","synthetic":false,"types":["libmedium::SETTINGS"]}];
+if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js b/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js
new file mode 100644
index 0000000..ee52c7a
--- /dev/null
+++ b/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js
@@ -0,0 +1,3 @@
+(function() {var implementors = {};
+implementors["libmedium"] = [{"text":"impl !RefUnwindSafe for Data","synthetic":true,"types":["libmedium::data::Data"]},{"text":"impl RefUnwindSafe for Meta","synthetic":true,"types":["libmedium::meta::routes::Meta"]},{"text":"impl RefUnwindSafe for BuildDetails","synthetic":true,"types":["libmedium::meta::BuildDetails"]},{"text":"impl RefUnwindSafe for build_details","synthetic":true,"types":["libmedium::meta::build_details"]},{"text":"impl RefUnwindSafe for Proxy","synthetic":true,"types":["libmedium::proxy::routes::Proxy"]},{"text":"impl RefUnwindSafe for Variables","synthetic":true,"types":["libmedium::proxy::get_post::Variables"]},{"text":"impl RefUnwindSafe for ResponseData","synthetic":true,"types":["libmedium::proxy::get_post::ResponseData"]},{"text":"impl RefUnwindSafe for GetPostPost","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPost"]},{"text":"impl RefUnwindSafe for GetPostPostCreator","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostCreator"]},{"text":"impl RefUnwindSafe for GetPostPostContent","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContent"]},{"text":"impl RefUnwindSafe for GetPostPostContentBodyModel","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModel"]},{"text":"impl RefUnwindSafe for GetPostPostContentBodyModelParagraphs","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphs"]},{"text":"impl RefUnwindSafe for GetPostPostContentBodyModelParagraphsMarkups","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsMarkups"]},{"text":"impl RefUnwindSafe for GetPostPostContentBodyModelParagraphsIframe","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsIframe"]},{"text":"impl RefUnwindSafe for GetPostPostContentBodyModelParagraphsIframeMediaResource","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsIframeMediaResource"]},{"text":"impl RefUnwindSafe for GetPostPostContentBodyModelParagraphsMetadata","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsMetadata"]},{"text":"impl RefUnwindSafe for GetPost","synthetic":true,"types":["libmedium::proxy::GetPost"]},{"text":"impl RefUnwindSafe for Post","synthetic":true,"types":["libmedium::proxy::Post"]},{"text":"impl RefUnwindSafe for page","synthetic":true,"types":["libmedium::proxy::page"]},{"text":"impl RefUnwindSafe for Routes","synthetic":true,"types":["libmedium::routes::Routes"]},{"text":"impl RefUnwindSafe for Server","synthetic":true,"types":["libmedium::settings::Server"]},{"text":"impl RefUnwindSafe for Settings","synthetic":true,"types":["libmedium::settings::Settings"]},{"text":"impl RefUnwindSafe for SETTINGS","synthetic":true,"types":["libmedium::SETTINGS"]}];
+if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/implementors/core/panic/unwind_safe/trait.UnwindSafe.js b/implementors/core/panic/unwind_safe/trait.UnwindSafe.js
new file mode 100644
index 0000000..6cd95b4
--- /dev/null
+++ b/implementors/core/panic/unwind_safe/trait.UnwindSafe.js
@@ -0,0 +1,3 @@
+(function() {var implementors = {};
+implementors["libmedium"] = [{"text":"impl !UnwindSafe for Data","synthetic":true,"types":["libmedium::data::Data"]},{"text":"impl UnwindSafe for Meta","synthetic":true,"types":["libmedium::meta::routes::Meta"]},{"text":"impl UnwindSafe for BuildDetails","synthetic":true,"types":["libmedium::meta::BuildDetails"]},{"text":"impl UnwindSafe for build_details","synthetic":true,"types":["libmedium::meta::build_details"]},{"text":"impl UnwindSafe for Proxy","synthetic":true,"types":["libmedium::proxy::routes::Proxy"]},{"text":"impl UnwindSafe for Variables","synthetic":true,"types":["libmedium::proxy::get_post::Variables"]},{"text":"impl UnwindSafe for ResponseData","synthetic":true,"types":["libmedium::proxy::get_post::ResponseData"]},{"text":"impl UnwindSafe for GetPostPost","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPost"]},{"text":"impl UnwindSafe for GetPostPostCreator","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostCreator"]},{"text":"impl UnwindSafe for GetPostPostContent","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContent"]},{"text":"impl UnwindSafe for GetPostPostContentBodyModel","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModel"]},{"text":"impl UnwindSafe for GetPostPostContentBodyModelParagraphs","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphs"]},{"text":"impl UnwindSafe for GetPostPostContentBodyModelParagraphsMarkups","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsMarkups"]},{"text":"impl UnwindSafe for GetPostPostContentBodyModelParagraphsIframe","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsIframe"]},{"text":"impl UnwindSafe for GetPostPostContentBodyModelParagraphsIframeMediaResource","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsIframeMediaResource"]},{"text":"impl UnwindSafe for GetPostPostContentBodyModelParagraphsMetadata","synthetic":true,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsMetadata"]},{"text":"impl UnwindSafe for GetPost","synthetic":true,"types":["libmedium::proxy::GetPost"]},{"text":"impl UnwindSafe for Post","synthetic":true,"types":["libmedium::proxy::Post"]},{"text":"impl UnwindSafe for page","synthetic":true,"types":["libmedium::proxy::page"]},{"text":"impl UnwindSafe for Routes","synthetic":true,"types":["libmedium::routes::Routes"]},{"text":"impl UnwindSafe for Server","synthetic":true,"types":["libmedium::settings::Server"]},{"text":"impl UnwindSafe for Settings","synthetic":true,"types":["libmedium::settings::Settings"]},{"text":"impl UnwindSafe for SETTINGS","synthetic":true,"types":["libmedium::SETTINGS"]}];
+if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/implementors/graphql_client/trait.GraphQLQuery.js b/implementors/graphql_client/trait.GraphQLQuery.js
new file mode 100644
index 0000000..df4404d
--- /dev/null
+++ b/implementors/graphql_client/trait.GraphQLQuery.js
@@ -0,0 +1,3 @@
+(function() {var implementors = {};
+implementors["libmedium"] = [{"text":"impl GraphQLQuery for GetPost","synthetic":false,"types":["libmedium::proxy::GetPost"]}];
+if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/implementors/lazy_static/trait.LazyStatic.js b/implementors/lazy_static/trait.LazyStatic.js
new file mode 100644
index 0000000..4e573bf
--- /dev/null
+++ b/implementors/lazy_static/trait.LazyStatic.js
@@ -0,0 +1,3 @@
+(function() {var implementors = {};
+implementors["libmedium"] = [{"text":"impl LazyStatic for SETTINGS","synthetic":false,"types":["libmedium::SETTINGS"]}];
+if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/implementors/libmedium/proxy/trait.StringUtils.js b/implementors/libmedium/proxy/trait.StringUtils.js
new file mode 100644
index 0000000..751fa27
--- /dev/null
+++ b/implementors/libmedium/proxy/trait.StringUtils.js
@@ -0,0 +1,3 @@
+(function() {var implementors = {};
+implementors["libmedium"] = [];
+if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/implementors/sailfish/private/trait.Sealed.js b/implementors/sailfish/private/trait.Sealed.js
new file mode 100644
index 0000000..43b085c
--- /dev/null
+++ b/implementors/sailfish/private/trait.Sealed.js
@@ -0,0 +1,3 @@
+(function() {var implementors = {};
+implementors["libmedium"] = [{"text":"impl Sealed for Post","synthetic":false,"types":["libmedium::proxy::Post"]}];
+if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/implementors/sailfish/trait.TemplateOnce.js b/implementors/sailfish/trait.TemplateOnce.js
new file mode 100644
index 0000000..6646a60
--- /dev/null
+++ b/implementors/sailfish/trait.TemplateOnce.js
@@ -0,0 +1,3 @@
+(function() {var implementors = {};
+implementors["libmedium"] = [{"text":"impl TemplateOnce for Post","synthetic":false,"types":["libmedium::proxy::Post"]}];
+if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/implementors/serde/de/trait.Deserialize.js b/implementors/serde/de/trait.Deserialize.js
new file mode 100644
index 0000000..7e50a3e
--- /dev/null
+++ b/implementors/serde/de/trait.Deserialize.js
@@ -0,0 +1,3 @@
+(function() {var implementors = {};
+implementors["libmedium"] = [{"text":"impl Deserialize<'static> for BuildDetails","synthetic":false,"types":["libmedium::meta::BuildDetails"]},{"text":"impl<'de> Deserialize<'de> for ResponseData","synthetic":false,"types":["libmedium::proxy::get_post::ResponseData"]},{"text":"impl<'de> Deserialize<'de> for GetPostPost","synthetic":false,"types":["libmedium::proxy::get_post::GetPostPost"]},{"text":"impl<'de> Deserialize<'de> for GetPostPostCreator","synthetic":false,"types":["libmedium::proxy::get_post::GetPostPostCreator"]},{"text":"impl<'de> Deserialize<'de> for GetPostPostContent","synthetic":false,"types":["libmedium::proxy::get_post::GetPostPostContent"]},{"text":"impl<'de> Deserialize<'de> for GetPostPostContentBodyModel","synthetic":false,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModel"]},{"text":"impl<'de> Deserialize<'de> for GetPostPostContentBodyModelParagraphs","synthetic":false,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphs"]},{"text":"impl<'de> Deserialize<'de> for GetPostPostContentBodyModelParagraphsMarkups","synthetic":false,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsMarkups"]},{"text":"impl<'de> Deserialize<'de> for GetPostPostContentBodyModelParagraphsIframe","synthetic":false,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsIframe"]},{"text":"impl<'de> Deserialize<'de> for GetPostPostContentBodyModelParagraphsIframeMediaResource","synthetic":false,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsIframeMediaResource"]},{"text":"impl<'de> Deserialize<'de> for GetPostPostContentBodyModelParagraphsMetadata","synthetic":false,"types":["libmedium::proxy::get_post::GetPostPostContentBodyModelParagraphsMetadata"]},{"text":"impl<'de> Deserialize<'de> for Server","synthetic":false,"types":["libmedium::settings::Server"]},{"text":"impl<'de> Deserialize<'de> for Settings","synthetic":false,"types":["libmedium::settings::Settings"]}];
+if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/implementors/serde/ser/trait.Serialize.js b/implementors/serde/ser/trait.Serialize.js
new file mode 100644
index 0000000..c307365
--- /dev/null
+++ b/implementors/serde/ser/trait.Serialize.js
@@ -0,0 +1,3 @@
+(function() {var implementors = {};
+implementors["libmedium"] = [{"text":"impl Serialize for BuildDetails","synthetic":false,"types":["libmedium::meta::BuildDetails"]},{"text":"impl Serialize for Variables","synthetic":false,"types":["libmedium::proxy::get_post::Variables"]}];
+if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
\ No newline at end of file
diff --git a/libmedium/all.html b/libmedium/all.html
new file mode 100644
index 0000000..b3d276d
--- /dev/null
+++ b/libmedium/all.html
@@ -0,0 +1,5 @@
+
+
+
\ No newline at end of file
diff --git a/libmedium/constant.CACHE_AGE.html b/libmedium/constant.CACHE_AGE.html
new file mode 100644
index 0000000..8e87b15
--- /dev/null
+++ b/libmedium/constant.CACHE_AGE.html
@@ -0,0 +1,3 @@
+CACHE_AGE in libmedium - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/constant.GIT_COMMIT_HASH.html b/libmedium/constant.GIT_COMMIT_HASH.html
new file mode 100644
index 0000000..9791efb
--- /dev/null
+++ b/libmedium/constant.GIT_COMMIT_HASH.html
@@ -0,0 +1,3 @@
+GIT_COMMIT_HASH in libmedium - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/constant.PKG_DESCRIPTION.html b/libmedium/constant.PKG_DESCRIPTION.html
new file mode 100644
index 0000000..3088b28
--- /dev/null
+++ b/libmedium/constant.PKG_DESCRIPTION.html
@@ -0,0 +1,3 @@
+PKG_DESCRIPTION in libmedium - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/constant.PKG_HOMEPAGE.html b/libmedium/constant.PKG_HOMEPAGE.html
new file mode 100644
index 0000000..793e816
--- /dev/null
+++ b/libmedium/constant.PKG_HOMEPAGE.html
@@ -0,0 +1,3 @@
+PKG_HOMEPAGE in libmedium - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/constant.PKG_NAME.html b/libmedium/constant.PKG_NAME.html
new file mode 100644
index 0000000..843aaea
--- /dev/null
+++ b/libmedium/constant.PKG_NAME.html
@@ -0,0 +1,3 @@
+PKG_NAME in libmedium - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/constant.V1_API_ROUTES.html b/libmedium/constant.V1_API_ROUTES.html
new file mode 100644
index 0000000..af4141a
--- /dev/null
+++ b/libmedium/constant.V1_API_ROUTES.html
@@ -0,0 +1,3 @@
+V1_API_ROUTES in libmedium - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/constant.VERSION.html b/libmedium/constant.VERSION.html
new file mode 100644
index 0000000..d670bc5
--- /dev/null
+++ b/libmedium/constant.VERSION.html
@@ -0,0 +1,3 @@
+VERSION in libmedium - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/data/index.html b/libmedium/data/index.html
new file mode 100644
index 0000000..86231d6
--- /dev/null
+++ b/libmedium/data/index.html
@@ -0,0 +1,5 @@
+libmedium::data - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/data/sidebar-items.js b/libmedium/data/sidebar-items.js
new file mode 100644
index 0000000..70a1d3c
--- /dev/null
+++ b/libmedium/data/sidebar-items.js
@@ -0,0 +1 @@
+initSidebarItems({"struct":[["Data",""]],"type":[["AppData",""]]});
\ No newline at end of file
diff --git a/libmedium/data/struct.Data.html b/libmedium/data/struct.Data.html
new file mode 100644
index 0000000..33eab4c
--- /dev/null
+++ b/libmedium/data/struct.Data.html
@@ -0,0 +1,29 @@
+Data in libmedium::data - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/data/type.AppData.html b/libmedium/data/type.AppData.html
new file mode 100644
index 0000000..816b757
--- /dev/null
+++ b/libmedium/data/type.AppData.html
@@ -0,0 +1,3 @@
+AppData in libmedium::data - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/fn.get_json_err.html b/libmedium/fn.get_json_err.html
new file mode 100644
index 0000000..2b8ab11
--- /dev/null
+++ b/libmedium/fn.get_json_err.html
@@ -0,0 +1,3 @@
+get_json_err in libmedium - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/fn.main.html b/libmedium/fn.main.html
new file mode 100644
index 0000000..9f5cd0b
--- /dev/null
+++ b/libmedium/fn.main.html
@@ -0,0 +1,3 @@
+main in libmedium - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/fn.services.html b/libmedium/fn.services.html
new file mode 100644
index 0000000..7adedfd
--- /dev/null
+++ b/libmedium/fn.services.html
@@ -0,0 +1,3 @@
+services in libmedium - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/index.html b/libmedium/index.html
new file mode 100644
index 0000000..f16c708
--- /dev/null
+++ b/libmedium/index.html
@@ -0,0 +1,8 @@
+libmedium - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/meta/fn.services.html b/libmedium/meta/fn.services.html
new file mode 100644
index 0000000..74b9341
--- /dev/null
+++ b/libmedium/meta/fn.services.html
@@ -0,0 +1,3 @@
+services in libmedium::meta - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/meta/index.html b/libmedium/meta/index.html
new file mode 100644
index 0000000..b8481da
--- /dev/null
+++ b/libmedium/meta/index.html
@@ -0,0 +1,7 @@
+libmedium::meta - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/meta/routes/index.html b/libmedium/meta/routes/index.html
new file mode 100644
index 0000000..3960035
--- /dev/null
+++ b/libmedium/meta/routes/index.html
@@ -0,0 +1,4 @@
+libmedium::meta::routes - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/meta/routes/sidebar-items.js b/libmedium/meta/routes/sidebar-items.js
new file mode 100644
index 0000000..7c6ba55
--- /dev/null
+++ b/libmedium/meta/routes/sidebar-items.js
@@ -0,0 +1 @@
+initSidebarItems({"struct":[["Meta",""]]});
\ No newline at end of file
diff --git a/libmedium/meta/routes/struct.Meta.html b/libmedium/meta/routes/struct.Meta.html
new file mode 100644
index 0000000..5926394
--- /dev/null
+++ b/libmedium/meta/routes/struct.Meta.html
@@ -0,0 +1,24 @@
+Meta in libmedium::meta::routes - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/meta/sidebar-items.js b/libmedium/meta/sidebar-items.js
new file mode 100644
index 0000000..d0e652a
--- /dev/null
+++ b/libmedium/meta/sidebar-items.js
@@ -0,0 +1 @@
+initSidebarItems({"fn":[["services",""]],"mod":[["routes",""]],"struct":[["BuildDetails",""],["build_details","emmits build details of the bninary"]]});
\ No newline at end of file
diff --git a/libmedium/meta/struct.BuildDetails.html b/libmedium/meta/struct.BuildDetails.html
new file mode 100644
index 0000000..0246f38
--- /dev/null
+++ b/libmedium/meta/struct.BuildDetails.html
@@ -0,0 +1,33 @@
+BuildDetails in libmedium::meta - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/meta/struct.build_details.html b/libmedium/meta/struct.build_details.html
new file mode 100644
index 0000000..4026483
--- /dev/null
+++ b/libmedium/meta/struct.build_details.html
@@ -0,0 +1,22 @@
+build_details in libmedium::meta - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/proxy/fn.services.html b/libmedium/proxy/fn.services.html
new file mode 100644
index 0000000..cd7434b
--- /dev/null
+++ b/libmedium/proxy/fn.services.html
@@ -0,0 +1,3 @@
+services in libmedium::proxy - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/proxy/get_post/constant.OPERATION_NAME.html b/libmedium/proxy/get_post/constant.OPERATION_NAME.html
new file mode 100644
index 0000000..4decd42
--- /dev/null
+++ b/libmedium/proxy/get_post/constant.OPERATION_NAME.html
@@ -0,0 +1,3 @@
+OPERATION_NAME in libmedium::proxy::get_post - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/proxy/get_post/constant.QUERY.html b/libmedium/proxy/get_post/constant.QUERY.html
new file mode 100644
index 0000000..b12cace
--- /dev/null
+++ b/libmedium/proxy/get_post/constant.QUERY.html
@@ -0,0 +1,3 @@
+QUERY in libmedium::proxy::get_post - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/proxy/get_post/constant.__QUERY_WORKAROUND.html b/libmedium/proxy/get_post/constant.__QUERY_WORKAROUND.html
new file mode 100644
index 0000000..5af0018
--- /dev/null
+++ b/libmedium/proxy/get_post/constant.__QUERY_WORKAROUND.html
@@ -0,0 +1,3 @@
+__QUERY_WORKAROUND in libmedium::proxy::get_post - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/proxy/get_post/index.html b/libmedium/proxy/get_post/index.html
new file mode 100644
index 0000000..5c68af6
--- /dev/null
+++ b/libmedium/proxy/get_post/index.html
@@ -0,0 +1,6 @@
+libmedium::proxy::get_post - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/proxy/get_post/sidebar-items.js b/libmedium/proxy/get_post/sidebar-items.js
new file mode 100644
index 0000000..08f0687
--- /dev/null
+++ b/libmedium/proxy/get_post/sidebar-items.js
@@ -0,0 +1 @@
+initSidebarItems({"constant":[["OPERATION_NAME",""],["QUERY",""],["__QUERY_WORKAROUND",""]],"struct":[["GetPostPost",""],["GetPostPostContent",""],["GetPostPostContentBodyModel",""],["GetPostPostContentBodyModelParagraphs",""],["GetPostPostContentBodyModelParagraphsIframe",""],["GetPostPostContentBodyModelParagraphsIframeMediaResource",""],["GetPostPostContentBodyModelParagraphsMarkups",""],["GetPostPostContentBodyModelParagraphsMetadata",""],["GetPostPostCreator",""],["ResponseData",""],["Variables",""]],"type":[["Boolean",""],["Float",""],["ID",""],["Int",""]]});
\ No newline at end of file
diff --git a/libmedium/proxy/get_post/struct.GetPostPost.html b/libmedium/proxy/get_post/struct.GetPostPost.html
new file mode 100644
index 0000000..cda6464
--- /dev/null
+++ b/libmedium/proxy/get_post/struct.GetPostPost.html
@@ -0,0 +1,28 @@
+GetPostPost in libmedium::proxy::get_post - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/proxy/get_post/struct.GetPostPostContent.html b/libmedium/proxy/get_post/struct.GetPostPostContent.html
new file mode 100644
index 0000000..16b70ce
--- /dev/null
+++ b/libmedium/proxy/get_post/struct.GetPostPostContent.html
@@ -0,0 +1,25 @@
+GetPostPostContent in libmedium::proxy::get_post - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/proxy/get_post/struct.GetPostPostContentBodyModel.html b/libmedium/proxy/get_post/struct.GetPostPostContentBodyModel.html
new file mode 100644
index 0000000..98600c6
--- /dev/null
+++ b/libmedium/proxy/get_post/struct.GetPostPostContentBodyModel.html
@@ -0,0 +1,25 @@
+GetPostPostContentBodyModel in libmedium::proxy::get_post - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/proxy/get_post/struct.GetPostPostContentBodyModelParagraphs.html b/libmedium/proxy/get_post/struct.GetPostPostContentBodyModelParagraphs.html
new file mode 100644
index 0000000..c4f0f85
--- /dev/null
+++ b/libmedium/proxy/get_post/struct.GetPostPostContentBodyModelParagraphs.html
@@ -0,0 +1,31 @@
+GetPostPostContentBodyModelParagraphs in libmedium::proxy::get_post - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/proxy/get_post/struct.GetPostPostContentBodyModelParagraphsIframe.html b/libmedium/proxy/get_post/struct.GetPostPostContentBodyModelParagraphsIframe.html
new file mode 100644
index 0000000..0de708e
--- /dev/null
+++ b/libmedium/proxy/get_post/struct.GetPostPostContentBodyModelParagraphsIframe.html
@@ -0,0 +1,25 @@
+GetPostPostContentBodyModelParagraphsIframe in libmedium::proxy::get_post - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/proxy/get_post/struct.GetPostPostContentBodyModelParagraphsIframeMediaResource.html b/libmedium/proxy/get_post/struct.GetPostPostContentBodyModelParagraphsIframeMediaResource.html
new file mode 100644
index 0000000..172aaaa
--- /dev/null
+++ b/libmedium/proxy/get_post/struct.GetPostPostContentBodyModelParagraphsIframeMediaResource.html
@@ -0,0 +1,28 @@
+GetPostPostContentBodyModelParagraphsIframeMediaResource in libmedium::proxy::get_post - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/proxy/get_post/struct.GetPostPostContentBodyModelParagraphsMarkups.html b/libmedium/proxy/get_post/struct.GetPostPostContentBodyModelParagraphsMarkups.html
new file mode 100644
index 0000000..8272cc4
--- /dev/null
+++ b/libmedium/proxy/get_post/struct.GetPostPostContentBodyModelParagraphsMarkups.html
@@ -0,0 +1,31 @@
+GetPostPostContentBodyModelParagraphsMarkups in libmedium::proxy::get_post - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/proxy/get_post/struct.GetPostPostContentBodyModelParagraphsMetadata.html b/libmedium/proxy/get_post/struct.GetPostPostContentBodyModelParagraphsMetadata.html
new file mode 100644
index 0000000..13d98d4
--- /dev/null
+++ b/libmedium/proxy/get_post/struct.GetPostPostContentBodyModelParagraphsMetadata.html
@@ -0,0 +1,27 @@
+GetPostPostContentBodyModelParagraphsMetadata in libmedium::proxy::get_post - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/proxy/get_post/struct.GetPostPostCreator.html b/libmedium/proxy/get_post/struct.GetPostPostCreator.html
new file mode 100644
index 0000000..679e91c
--- /dev/null
+++ b/libmedium/proxy/get_post/struct.GetPostPostCreator.html
@@ -0,0 +1,26 @@
+GetPostPostCreator in libmedium::proxy::get_post - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/proxy/get_post/struct.ResponseData.html b/libmedium/proxy/get_post/struct.ResponseData.html
new file mode 100644
index 0000000..9b4c011
--- /dev/null
+++ b/libmedium/proxy/get_post/struct.ResponseData.html
@@ -0,0 +1,25 @@
+ResponseData in libmedium::proxy::get_post - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/proxy/get_post/struct.Variables.html b/libmedium/proxy/get_post/struct.Variables.html
new file mode 100644
index 0000000..53bcbe1
--- /dev/null
+++ b/libmedium/proxy/get_post/struct.Variables.html
@@ -0,0 +1,24 @@
+Variables in libmedium::proxy::get_post - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/proxy/get_post/type.Boolean.html b/libmedium/proxy/get_post/type.Boolean.html
new file mode 100644
index 0000000..d0aedd7
--- /dev/null
+++ b/libmedium/proxy/get_post/type.Boolean.html
@@ -0,0 +1,3 @@
+Boolean in libmedium::proxy::get_post - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/proxy/get_post/type.Float.html b/libmedium/proxy/get_post/type.Float.html
new file mode 100644
index 0000000..0721ad7
--- /dev/null
+++ b/libmedium/proxy/get_post/type.Float.html
@@ -0,0 +1,3 @@
+Float in libmedium::proxy::get_post - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/proxy/get_post/type.ID.html b/libmedium/proxy/get_post/type.ID.html
new file mode 100644
index 0000000..bff037d
--- /dev/null
+++ b/libmedium/proxy/get_post/type.ID.html
@@ -0,0 +1,3 @@
+ID in libmedium::proxy::get_post - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/proxy/get_post/type.Int.html b/libmedium/proxy/get_post/type.Int.html
new file mode 100644
index 0000000..a26c718
--- /dev/null
+++ b/libmedium/proxy/get_post/type.Int.html
@@ -0,0 +1,3 @@
+Int in libmedium::proxy::get_post - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/proxy/index.html b/libmedium/proxy/index.html
new file mode 100644
index 0000000..79d5d5a
--- /dev/null
+++ b/libmedium/proxy/index.html
@@ -0,0 +1,7 @@
+libmedium::proxy - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/proxy/routes/index.html b/libmedium/proxy/routes/index.html
new file mode 100644
index 0000000..2dca0ac
--- /dev/null
+++ b/libmedium/proxy/routes/index.html
@@ -0,0 +1,4 @@
+libmedium::proxy::routes - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/proxy/routes/sidebar-items.js b/libmedium/proxy/routes/sidebar-items.js
new file mode 100644
index 0000000..838d1ae
--- /dev/null
+++ b/libmedium/proxy/routes/sidebar-items.js
@@ -0,0 +1 @@
+initSidebarItems({"struct":[["Proxy",""]]});
\ No newline at end of file
diff --git a/libmedium/proxy/routes/struct.Proxy.html b/libmedium/proxy/routes/struct.Proxy.html
new file mode 100644
index 0000000..22be828
--- /dev/null
+++ b/libmedium/proxy/routes/struct.Proxy.html
@@ -0,0 +1,24 @@
+Proxy in libmedium::proxy::routes - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/proxy/sidebar-items.js b/libmedium/proxy/sidebar-items.js
new file mode 100644
index 0000000..40deabc
--- /dev/null
+++ b/libmedium/proxy/sidebar-items.js
@@ -0,0 +1 @@
+initSidebarItems({"fn":[["services",""]],"mod":[["get_post",""],["routes",""]],"struct":[["GetPost",""],["Post",""],["page",""]],"trait":[["StringUtils",""]]});
\ No newline at end of file
diff --git a/libmedium/proxy/struct.GetPost.html b/libmedium/proxy/struct.GetPost.html
new file mode 100644
index 0000000..1fcea55
--- /dev/null
+++ b/libmedium/proxy/struct.GetPost.html
@@ -0,0 +1,24 @@
+GetPost in libmedium::proxy - Rust
The top-level shape of the response data (the data field in the GraphQL response). In practice this should be generated, since it is hard to write by hand without error.
+
+
\ No newline at end of file
diff --git a/libmedium/proxy/struct.Post.html b/libmedium/proxy/struct.Post.html
new file mode 100644
index 0000000..9cbcbd3
--- /dev/null
+++ b/libmedium/proxy/struct.Post.html
@@ -0,0 +1,26 @@
+Post in libmedium::proxy - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/proxy/struct.page.html b/libmedium/proxy/struct.page.html
new file mode 100644
index 0000000..8ccd504
--- /dev/null
+++ b/libmedium/proxy/struct.page.html
@@ -0,0 +1,21 @@
+page in libmedium::proxy - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/proxy/trait.StringUtils.html b/libmedium/proxy/trait.StringUtils.html
new file mode 100644
index 0000000..04ed815
--- /dev/null
+++ b/libmedium/proxy/trait.StringUtils.html
@@ -0,0 +1,6 @@
+StringUtils in libmedium::proxy - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/routes/constant.ROUTES.html b/libmedium/routes/constant.ROUTES.html
new file mode 100644
index 0000000..15d6c7c
--- /dev/null
+++ b/libmedium/routes/constant.ROUTES.html
@@ -0,0 +1,3 @@
+ROUTES in libmedium::routes - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/routes/fn.services.html b/libmedium/routes/fn.services.html
new file mode 100644
index 0000000..36a2df8
--- /dev/null
+++ b/libmedium/routes/fn.services.html
@@ -0,0 +1,3 @@
+services in libmedium::routes - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/routes/index.html b/libmedium/routes/index.html
new file mode 100644
index 0000000..21ae508
--- /dev/null
+++ b/libmedium/routes/index.html
@@ -0,0 +1,6 @@
+libmedium::routes - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/routes/sidebar-items.js b/libmedium/routes/sidebar-items.js
new file mode 100644
index 0000000..d357031
--- /dev/null
+++ b/libmedium/routes/sidebar-items.js
@@ -0,0 +1 @@
+initSidebarItems({"constant":[["ROUTES",""]],"fn":[["services",""]],"struct":[["Routes",""]]});
\ No newline at end of file
diff --git a/libmedium/routes/struct.Routes.html b/libmedium/routes/struct.Routes.html
new file mode 100644
index 0000000..3c25c60
--- /dev/null
+++ b/libmedium/routes/struct.Routes.html
@@ -0,0 +1,24 @@
+Routes in libmedium::routes - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/settings/fn.check_url.html b/libmedium/settings/fn.check_url.html
new file mode 100644
index 0000000..32284ff
--- /dev/null
+++ b/libmedium/settings/fn.check_url.html
@@ -0,0 +1,3 @@
+check_url in libmedium::settings - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/settings/index.html b/libmedium/settings/index.html
new file mode 100644
index 0000000..1c37de2
--- /dev/null
+++ b/libmedium/settings/index.html
@@ -0,0 +1,5 @@
+libmedium::settings - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/settings/sidebar-items.js b/libmedium/settings/sidebar-items.js
new file mode 100644
index 0000000..3114444
--- /dev/null
+++ b/libmedium/settings/sidebar-items.js
@@ -0,0 +1 @@
+initSidebarItems({"fn":[["check_url",""]],"struct":[["Server",""],["Settings",""]]});
\ No newline at end of file
diff --git a/libmedium/settings/struct.Server.html b/libmedium/settings/struct.Server.html
new file mode 100644
index 0000000..b900901
--- /dev/null
+++ b/libmedium/settings/struct.Server.html
@@ -0,0 +1,35 @@
+Server in libmedium::settings - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/settings/struct.Settings.html b/libmedium/settings/struct.Settings.html
new file mode 100644
index 0000000..e1a3c74
--- /dev/null
+++ b/libmedium/settings/struct.Settings.html
@@ -0,0 +1,33 @@
+Settings in libmedium::settings - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/sidebar-items.js b/libmedium/sidebar-items.js
new file mode 100644
index 0000000..1c4c4b0
--- /dev/null
+++ b/libmedium/sidebar-items.js
@@ -0,0 +1 @@
+initSidebarItems({"constant":[["CACHE_AGE",""],["GIT_COMMIT_HASH",""],["PKG_DESCRIPTION",""],["PKG_HOMEPAGE",""],["PKG_NAME",""],["V1_API_ROUTES",""],["VERSION",""]],"fn":[["get_json_err",""],["main",""],["services",""]],"mod":[["data",""],["meta",""],["proxy",""],["routes",""],["settings",""]],"struct":[["Data",""],["SETTINGS",""],["Settings",""]],"type":[["AppData",""]]});
\ No newline at end of file
diff --git a/libmedium/struct.Data.html b/libmedium/struct.Data.html
new file mode 100644
index 0000000..fd1a076
--- /dev/null
+++ b/libmedium/struct.Data.html
@@ -0,0 +1,29 @@
+Data in libmedium - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/struct.SETTINGS.html b/libmedium/struct.SETTINGS.html
new file mode 100644
index 0000000..ce1367d
--- /dev/null
+++ b/libmedium/struct.SETTINGS.html
@@ -0,0 +1,25 @@
+SETTINGS in libmedium - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/struct.Settings.html b/libmedium/struct.Settings.html
new file mode 100644
index 0000000..075573d
--- /dev/null
+++ b/libmedium/struct.Settings.html
@@ -0,0 +1,33 @@
+Settings in libmedium - Rust
+
+
\ No newline at end of file
diff --git a/libmedium/type.AppData.html b/libmedium/type.AppData.html
new file mode 100644
index 0000000..84fdffd
--- /dev/null
+++ b/libmedium/type.AppData.html
@@ -0,0 +1,3 @@
+AppData in libmedium - Rust
";var infos=["Prefix searches with a type followed by a colon (e.g., fn:) to \
+ restrict the search to a given item kind.","Accepted kinds are: fn, mod, struct, \
+ enum, trait, type, macro, \
+ and const.","Search functions by type signature (e.g., vec -> usize or \
+ * -> vec)","Search multiple things at once by splitting your query with comma (e.g., \
+ str,u8 or String,struct:Vec,test)","You can look for items with an exact name by putting double quotes around \
+ your request: \"string\"","Look for items inside another one by searching for a path: vec::Vec",].map(function(x){return"
"+infos;container.appendChild(book_info);container.appendChild(div_shortcuts);container.appendChild(div_infos);popup.appendChild(container);insertAfter(popup,searchState.outputElement());buildHelperPopup=function(){}};onHashChange(null);window.addEventListener("hashchange",onHashChange);searchState.setup()}());(function(){var reset_button_timeout=null;window.copy_path=function(but){var parent=but.parentElement;var path=[];onEach(parent.childNodes,function(child){if(child.tagName==='A'){path.push(child.textContent)}});var el=document.createElement('textarea');el.value=path.join('::');el.setAttribute('readonly','');el.style.position='absolute';el.style.left='-9999px';document.body.appendChild(el);el.select();document.execCommand('copy');document.body.removeChild(el);but.children[0].style.display='none';var tmp;if(but.childNodes.length<2){tmp=document.createTextNode('✓');but.appendChild(tmp)}else{onEachLazy(but.childNodes,function(e){if(e.nodeType===Node.TEXT_NODE){tmp=e;return true}});tmp.textContent='✓'}if(reset_button_timeout!==null){window.clearTimeout(reset_button_timeout)}function reset_button(){tmp.textContent='';reset_button_timeout=null;but.children[0].style.display=""}reset_button_timeout=window.setTimeout(reset_button,1000)}}())
\ No newline at end of file
diff --git a/normalize.css b/normalize.css
new file mode 100644
index 0000000..469959f
--- /dev/null
+++ b/normalize.css
@@ -0,0 +1,2 @@
+ /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
+html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:0.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type="button"],[type="reset"],[type="submit"],button{-webkit-appearance:button}[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}
\ No newline at end of file
diff --git a/noscript.css b/noscript.css
new file mode 100644
index 0000000..aea68ef
--- /dev/null
+++ b/noscript.css
@@ -0,0 +1 @@
+ #main .attributes{margin-left:0 !important;}#copy-path{display:none;}
\ No newline at end of file
diff --git a/noto-sans-kr-v13-korean-regular-LICENSE.txt b/noto-sans-kr-v13-korean-regular-LICENSE.txt
new file mode 100644
index 0000000..922d5fd
--- /dev/null
+++ b/noto-sans-kr-v13-korean-regular-LICENSE.txt
@@ -0,0 +1,93 @@
+Copyright 2014, 2015 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/noto-sans-kr-v13-korean-regular.woff b/noto-sans-kr-v13-korean-regular.woff
new file mode 100644
index 0000000..01d6b6b
Binary files /dev/null and b/noto-sans-kr-v13-korean-regular.woff differ
diff --git a/rust-logo.png b/rust-logo.png
new file mode 100644
index 0000000..74b4bd6
Binary files /dev/null and b/rust-logo.png differ
diff --git a/rustdoc.css b/rustdoc.css
new file mode 100644
index 0000000..29c1a7e
--- /dev/null
+++ b/rustdoc.css
@@ -0,0 +1 @@
+ @font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular.woff2") format("woff2"),url("FiraSans-Regular.woff") format('woff');font-display:swap;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium.woff2") format("woff2"),url("FiraSans-Medium.woff") format('woff');font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:400;src:local('Source Serif 4'),url("SourceSerif4-Regular.ttf.woff2") format("woff2"),url("SourceSerif4-Regular.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:italic;font-weight:400;src:local('Source Serif 4 Italic'),url("SourceSerif4-It.ttf.woff2") format("woff2"),url("SourceSerif4-It.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:700;src:local('Source Serif 4 Bold'),url("SourceSerif4-Bold.ttf.woff2") format("woff2"),url("SourceSerif4-Bold.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular.ttf.woff2") format("woff2"),url("SourceCodePro-Regular.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It.ttf.woff2") format("woff2"),url("SourceCodePro-It.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold.ttf.woff2") format("woff2"),url("SourceCodePro-Semibold.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Noto Sans KR';src:url("noto-sans-kr-v13-korean-regular.woff") format("woff");font-display:swap;unicode-range:U+A960-A97F,U+AC00-D7AF,U+D7B0-D7FF;}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}html{content:"";}@media (prefers-color-scheme:light){html{content:"light";}}@media (prefers-color-scheme:dark){html{content:"dark";}}body{font:16px/1.4 "Source Serif 4","Noto Sans KR",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,h4{font-weight:500;margin:20px 0 15px 0;padding-bottom:6px;}h1.fqn{display:flex;border-bottom:1px dashed;margin-top:0;padding-left:1px;}h1.fqn>.in-band>a:hover{text-decoration:underline;}h2,h3,h4{border-bottom:1px solid;}h3.code-header,h4.code-header{font-size:1em;font-weight:600;border:none;padding:0;margin:0;}.impl,.impl-items .method,.methods .method,.impl-items .type,.methods .type,.impl-items .associatedconstant,.methods .associatedconstant,.impl-items .associatedtype,.methods .associatedtype{flex-basis:100%;font-weight:600;margin-top:16px;margin-bottom:10px;position:relative;}.impl,.method.trait-impl,.type.trait-impl,.associatedconstant.trait-impl,.associatedtype.trait-impl{padding-left:15px;}div.impl-items>div{padding-left:0;}h1,h2,h3,h4,.sidebar,a.source,.search-input,.search-results .result-name,.content table td:first-child>a,.item-left>a,div.item-list .out-of-band,span.since,#source-sidebar,#sidebar-toggle,details.rustdoc-toggle>summary::before,details.undocumented>summary::before,div.impl-items>div:not(.docblock):not(.item-info),.content ul.crate a.crate,a.srclink,#main>ul.docblock>li>a{font-family:"Fira Sans",Arial,sans-serif;}.content ul.crate a.crate{font-size:16px/1.6;}ol,ul{padding-left:25px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.6em;}p{margin:0 0 .6em 0;}summary{outline:none;}td,th{padding:0;}table{border-collapse:collapse;}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0;}details:not(.rustdoc-toggle) summary{margin-bottom:.6em;}code,pre,a.test-arrow,.code-header{font-family:"Source Code Pro",monospace;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.1em;}.docblock pre code,.docblock-short pre code{padding:0;}pre{padding:14px;}.type-decl pre{overflow-x:auto;}.source .content pre{padding:20px;}img{max-width:100%;}li{position:relative;}.source .content{margin-top:50px;max-width:none;overflow:visible;margin-left:0px;}nav.sub{font-size:16px;text-transform:uppercase;}.sidebar{width:200px;position:fixed;left:0;top:0;bottom:0;overflow:auto;}*{scrollbar-width:initial;}.sidebar{scrollbar-width:thin;}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;}.sidebar .block>ul>li{margin-right:-10px;}.content,nav{max-width:960px;}.hidden{display:none !important;}.logo-container{height:100px;width:100px;position:relative;margin:20px auto;display:block;margin-top:10px;}.logo-container>img{max-width:100px;max-height:100px;height:100%;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);display:block;}.sidebar .location{border:1px solid;font-size:17px;margin:30px 10px 20px 10px;text-align:center;word-wrap:break-word;font-weight:inherit;padding:0;}.sidebar .version{font-size:15px;text-align:center;border-bottom:1px solid;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word;}.location:empty{border:none;}.location a:first-of-type{font-weight:500;}.location a:hover{text-decoration:underline;}.block{padding:0;margin-bottom:14px;}.block h2,.block h3{text-align:center;}.block ul,.block li{margin:0 10px;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;}.sidebar-title{border-top:1px solid;border-bottom:1px solid;text-align:center;font-size:17px;margin-bottom:5px;font-weight:inherit;padding:0;}.sidebar-links{margin-bottom:15px;}.sidebar-links>a{padding-left:10px;width:100%;}.sidebar-menu{display:none;}.content{padding:15px 0;}.source .content pre.rust{white-space:pre;overflow:auto;padding-left:0;}.rustdoc .example-wrap{display:inline-flex;margin-bottom:10px;}.example-wrap{position:relative;width:100%;}.example-wrap>pre.line-number{overflow:initial;border:1px solid;padding:13px 8px;text-align:right;border-top-left-radius:5px;border-bottom-left-radius:5px;}.example-wrap>pre.rust a:hover{text-decoration:underline;}.rustdoc:not(.source) .example-wrap>pre:not(.line-number){width:100%;overflow-x:auto;}.rustdoc .example-wrap>pre{margin:0;}#search{margin-left:230px;position:relative;}#results>table{width:100%;table-layout:fixed;}.content>.example-wrap pre.line-numbers{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}.line-numbers span{cursor:pointer;}.docblock-short{overflow-wrap:anywhere;}.docblock-short p{display:inline;}.docblock-short p{overflow:hidden;text-overflow:ellipsis;margin:0;}.docblock>:not(pre)>code,.docblock-short>:not(pre)>code{white-space:pre-wrap;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5{border-bottom:1px solid;}.top-doc .docblock h1{font-size:1.3em;}.top-doc .docblock h2{font-size:1.15em;}.top-doc .docblock h3,.top-doc .docblock h4,.top-doc .docblock h5{font-size:1em;}.docblock h1{font-size:1em;}.docblock h2{font-size:0.95em;}.docblock h3,.docblock h4,.docblock h5{font-size:0.9em;}.docblock{margin-left:24px;position:relative;}.content .out-of-band{flex-grow:0;text-align:right;font-size:23px;margin:0px;padding:0 0 0 12px;font-weight:normal;}.method>.code-header,.trait-impl>.code-header,.invisible>.code-header{max-width:calc(100% - 41px);display:block;}.invisible{width:100%;display:inline-block;}.content .in-band{flex-grow:1;margin:0px;padding:0px;}.in-band>code,.in-band>.code-header{display:inline-block;}#main{position:relative;}#main>.since{top:inherit;font-family:"Fira Sans",Arial,sans-serif;}.content table:not(.table-display){border-spacing:0 5px;}.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;}.content tr:first-child td{border-top:0;}.docblock table{margin:.5em 0;width:calc(100% - 2px);overflow-x:auto;display:block;}.docblock table td{padding:.5em;border:1px dashed;}.docblock table th{padding:.5em;text-align:left;border:1px solid;}.fields+table{margin-bottom:1em;}.content .item-list{list-style-type:none;padding:0;}.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>.methods>.method{font-size:1em;position:relative;}.content .method .where,.content .fn .where,.content .where.fmt-newline{display:block;font-size:0.8em;}.content .methods>div:not(.notable-traits):not(.method){margin-left:40px;margin-bottom:15px;}.content .docblock>.impl-items{margin-left:20px;margin-top:-34px;}.content .docblock>.impl-items .table-display{margin:0;}.content .docblock>.impl-items table td{padding:0;}.content .docblock>.impl-items .table-display,.impl-items table td{border:none;}.content .item-info code{font-size:90%;}.content .item-info{position:relative;margin-left:33px;}.sub-variant>div>.item-info{margin-top:initial;}.content .item-info::before{content:'⬑';font-size:25px;position:absolute;top:-6px;left:-19px;}.content .impl-items .method,.content .impl-items>.type,.impl-items>.associatedconstant,.impl-items>.associatedtype,.content .impl-items details>summary>.type,.impl-items details>summary>.associatedconstant,.impl-items details>summary>.associatedtype{margin-left:20px;}.content .impl-items .docblock,.content .impl-items .item-info{margin-bottom:.6em;}.content .impl-items>.item-info{margin-left:40px;}.methods>.item-info,.content .impl-items>.item-info{margin-top:-8px;}.impl-items{flex-basis:100%;}#main>.item-info{margin-top:0;}nav:not(.sidebar){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;}.small-section-header{display:flex;justify-content:space-between;position:relative;}.small-section-header:hover>.anchor{display:initial;}.in-band:hover>.anchor,.impl:hover>.anchor,.method.trait-impl:hover>.anchor,.type.trait-impl:hover>.anchor,.associatedconstant.trait-impl:hover>.anchor,.associatedtype.trait-impl:hover>.anchor{display:inline-block;position:absolute;}.anchor{display:none;position:absolute;left:0;background:none !important;}.anchor.field{left:-5px;}.small-section-header>.anchor{left:-15px;padding-right:8px;}h2.small-section-header>.anchor{padding-right:6px;}.anchor::before{content:'§';}.docblock a:not(.srclink):not(.test-arrow):hover,.docblock-short a:not(.srclink):not(.test-arrow):hover,.item-info a{text-decoration:underline;}.invisible>.srclink,.method>.code-header+.srclink{position:absolute;top:0;right:0;font-size:17px;font-weight:normal;}.block a.current.crate{font-weight:500;}.item-table{display:grid;column-gap:1.2rem;row-gap:0.0rem;grid-template-columns:auto 1fr;justify-items:start;}.item-left,.item-right{display:block;}.item-left{grid-column:1;}.item-right{grid-column:2;}.search-container{position:relative;}.search-container>div{display:inline-flex;width:calc(100% - 63px);}#crate-search{min-width:115px;margin-top:5px;padding:6px;padding-right:19px;flex:none;border:0;border-right:0;border-radius:4px 0 0 4px;outline:none;cursor:pointer;border-right:1px solid;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;text-overflow:"";background-repeat:no-repeat;background-color:transparent;background-size:20px;background-position:calc(100% - 1px) 56%;}.search-container>.top-button{position:absolute;right:0;top:10px;}.search-input{-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;width:100%;}#crate-search+.search-input{border-radius:0 1px 1px 0;width:calc(100% - 32px);}.search-input:focus{border-radius:2px;border:0;outline:0;}.search-results{display:none;padding-bottom:2em;}.search-results.active{display:block;clear:both;}.search-results .desc>span{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:block;}.search-results>a{display:block;width:100%;margin-left:2px;margin-right:2px;border-bottom:1px solid #aaa3;}.search-results>a>div{display:flex;flex-flow:row wrap;}.search-results .result-name,.search-results div.desc,.search-results .result-description{width:50%;}.search-results .result-name{padding-right:1em;}.search-results .result-name>span{display:inline-block;margin:0;font-weight:normal;}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;box-shadow:0 0 6px rgba(0,0,0,.2);width:550px;height:auto;border:1px solid;}#help dt{float:left;clear:left;display:block;margin-right:0.5rem;}#help>div>span{text-align:center;display:block;margin:10px 0;font-size:18px;border-bottom:1px solid #ccc;padding-bottom:4px;margin-bottom:6px;}#help dd{margin:5px 35px;}#help .infos{padding-left:0;}#help h1,#help h2{margin-top:0;}#help>div div{width:50%;float:left;padding:0 20px 20px 17px;;}.item-info .stab{display:table;}.stab{border-width:1px;border-style:solid;padding:3px;margin-bottom:5px;font-size:90%;font-weight:normal;}.stab p{display:inline;}.stab .emoji{font-size:1.5em;}.emoji{text-shadow:1px 0 0 black,-1px 0 0 black,0 1px 0 black,0 -1px 0 black;}.module-item .stab,.import-item .stab{border-radius:3px;display:inline-block;font-size:80%;line-height:1.2;margin-bottom:0;margin-left:.3em;padding:2px;vertical-align:text-bottom;}.module-item.unstable,.import-item.unstable{opacity:0.65;}.since{font-weight:normal;font-size:initial;}.impl-items .since,.impl .since,.methods .since{padding-left:12px;padding-right:2px;position:initial;}.impl-items .srclink,.impl .srclink,.methods .srclink{font-size:17px;font-weight:normal;}.rightside{float:right;}.has-srclink{font-size:16px;margin-bottom:12px;justify-content:space-between;}.variants_table{width:100%;}.variants_table tbody tr td:first-child{width:1%;}td.summary-column{width:100%;}.summary{padding-right:0px;}pre.rust .question-mark{font-weight:bold;}a.test-arrow{display:inline-block;position:absolute;padding:5px 10px 5px 10px;border-radius:5px;font-size:130%;top:5px;right:5px;z-index:1;}a.test-arrow:hover{text-decoration:none;}.section-header:hover a:before{position:absolute;left:-25px;padding-right:10px;content:'\2002\00a7\2002';}.section-header:hover a{text-decoration:none;}.section-header a{color:inherit;}.code-attribute{font-weight:300;}.since+.srclink{padding-left:10px;}.item-spacer{width:100%;height:12px;}.out-of-band>span.since{position:initial;font-size:20px;margin-right:5px;}.sub-variant,.sub-variant>h3{margin-top:0px !important;padding-top:1px;}#main .sub-variant>h3{font-size:15px;margin-left:25px;margin-bottom:5px;}.sub-variant>div{margin-left:20px;margin-bottom:10px;}.sub-variant>div>span{display:block;position:relative;}.toggle-label{display:inline-block;margin-left:4px;margin-top:3px;}.docblock>.section-header:first-child{margin-left:15px;margin-top:0;}.docblock>.section-header:first-child:hover>a:before{left:-10px;}:target>code,:target>.code-header{opacity:1;}:target{padding-right:3px;}.information{position:absolute;left:-25px;margin-top:7px;z-index:1;}.tooltip{position:relative;display:inline-block;cursor:pointer;}.tooltip::after{display:none;text-align:center;padding:5px 3px 3px 3px;border-radius:6px;margin-left:5px;font-size:16px;}.tooltip.ignore::after{content:"This example is not tested";}.tooltip.compile_fail::after{content:"This example deliberately fails to compile";}.tooltip.should_panic::after{content:"This example panics";}.tooltip.edition::after{content:"This code runs with edition " attr(data-edition);}.tooltip::before{content:" ";position:absolute;top:50%;left:16px;margin-top:-5px;border-width:5px;border-style:solid;display:none;}.tooltip:hover::before,.tooltip:hover::after{display:inline;}.tooltip.compile_fail,.tooltip.should_panic,.tooltip.ignore{font-weight:bold;font-size:20px;}.notable-traits-tooltip{display:inline-block;cursor:pointer;}.notable-traits:hover .notable-traits-tooltiptext,.notable-traits .notable-traits-tooltiptext.force-tooltip{display:inline-block;}.notable-traits .notable-traits-tooltiptext{display:none;padding:5px 3px 3px 3px;border-radius:6px;margin-left:5px;z-index:10;font-size:16px;cursor:default;position:absolute;border:1px solid;}.notable-traits-tooltip::after{content:"\00a0\00a0\00a0";}.notable-traits .notable,.notable-traits .docblock{margin:0;}.notable-traits .notable{margin:0;margin-bottom:13px;font-size:19px;font-weight:600;}.notable-traits .docblock code.content{margin:0;padding:0;font-size:20px;}pre.rust.rust-example-rendered{position:relative;}pre.rust{tab-size:4;-moz-tab-size:4;}.search-failed{text-align:center;margin-top:20px;display:none;}.search-failed.active{display:block;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#titles{height:35px;}#titles>button{float:left;width:33.3%;text-align:center;font-size:18px;cursor:pointer;border:0;border-top:2px solid;}#titles>button:not(:last-child){margin-right:1px;width:calc(33.3% - 1px);}#titles>button>div.count{display:inline-block;font-size:16px;}.notable-traits{cursor:pointer;z-index:2;margin-left:5px;}#all-types{text-align:center;border:1px solid;margin:0 10px;margin-bottom:10px;display:block;border-radius:7px;}#all-types>p{margin:5px 0;}#sidebar-toggle{position:fixed;top:30px;left:300px;z-index:10;padding:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;cursor:pointer;font-weight:bold;transition:left .5s;font-size:1.2em;border:1px solid;border-left:0;}#source-sidebar{position:fixed;top:0;bottom:0;left:0;width:300px;z-index:1;overflow:auto;transition:left .5s;border-right:1px solid;}#source-sidebar>.title{font-size:1.5em;text-align:center;border-bottom:1px solid;margin-bottom:6px;}.theme-picker{position:absolute;left:211px;top:19px;}.theme-picker button{outline:none;}#settings-menu,#help-button{position:absolute;top:10px;}#settings-menu{right:0;outline:none;}#theme-picker,#settings-menu,#help-button,#copy-path{padding:4px;width:27px;height:29px;border:1px solid;border-radius:3px;cursor:pointer;}#help-button{right:30px;font-family:"Fira Sans",Arial,sans-serif;text-align:center;font-size:17px;padding-top:2px;}#copy-path{background:initial;margin-left:10px;padding:0;padding-left:2px;border:0;}#theme-choices{display:none;position:absolute;left:0;top:28px;border:1px solid;border-radius:3px;z-index:1;cursor:pointer;}#theme-choices>button{border:none;width:100%;padding:4px 8px;text-align:center;background:rgba(0,0,0,0);}#theme-choices>button:not(:first-child){border-top:1px solid;}kbd{display:inline-block;padding:3px 5px;font:15px monospace;line-height:10px;vertical-align:middle;border:solid 1px;border-radius:3px;box-shadow:inset 0 -1px 0;cursor:default;}.hidden-by-impl-hider,.hidden-by-usual-hider{display:none !important;}#implementations-list>h3>span.in-band{width:100%;}.table-display{width:100%;border:0;border-collapse:collapse;border-spacing:0;font-size:16px;}.table-display tr td:first-child{padding-right:0;}.table-display tr td:last-child{float:right;}.table-display .out-of-band{position:relative;font-size:19px;display:block;}#implementors-list>.impl-items .table-display .out-of-band{font-size:17px;}.table-display td:hover .anchor{display:block;top:2px;left:-5px;}#main>ul{padding-left:10px;}#main>ul>li{list-style:none;}.non-exhaustive{margin-bottom:1em;}div.children{padding-left:27px;display:none;}div.name{cursor:pointer;position:relative;margin-left:16px;}div.files>a{display:block;padding:0 3px;}div.files>a:hover,div.name:hover{background-color:#a14b4b;}div.name.expand+.children{display:block;}div.name::before{content:"\25B6";padding-left:4px;font-size:0.7em;position:absolute;left:-16px;top:4px;}div.name.expand::before{transform:rotate(90deg);left:-15px;top:2px;}details.rustdoc-toggle>summary.hideme{cursor:pointer;}details.rustdoc-toggle>summary,details.undocumented>summary{list-style:none;}details.rustdoc-toggle>summary::-webkit-details-marker,details.rustdoc-toggle>summary::marker,details.undocumented>summary::-webkit-details-marker,details.undocumented>summary::marker{display:none;}details.rustdoc-toggle>summary.hideme>span{margin-left:9px;}details.rustdoc-toggle>summary::before{content:"";cursor:pointer;width:17px;height:max(17px,1.1em);background-repeat:no-repeat;background-position:top left;display:inline-block;vertical-align:middle;opacity:.5;}details.rustdoc-toggle>summary::after{content:"Expand";overflow:hidden;width:0;height:0;position:absolute;}details.rustdoc-toggle>summary.hideme::after{content:"";}details.rustdoc-toggle>summary:focus::before,details.rustdoc-toggle>summary:hover::before{opacity:1;}details.rustdoc-toggle.top-doc>summary,details.rustdoc-toggle.top-doc>summary::before,details.rustdoc-toggle.non-exhaustive>summary,details.rustdoc-toggle.non-exhaustive>summary::before{font-family:'Fira Sans';font-size:16px;}details.non-exhaustive{margin-bottom:8px;}details.rustdoc-toggle>summary.hideme::before{position:relative;}details.rustdoc-toggle>summary:not(.hideme)::before{position:absolute;left:-23px;top:3px;}.impl-items>details.rustdoc-toggle>summary:not(.hideme)::before,.undocumented>details.rustdoc-toggle>summary:not(.hideme)::before{position:absolute;left:-2px;}details.rustdoc-toggle[open] >summary.hideme{position:absolute;}details.rustdoc-toggle,details.undocumented{position:relative;}details.rustdoc-toggle[open] >summary.hideme>span{display:none;}details.rustdoc-toggle[open] >summary::before,details.rustdoc-toggle[open] >summary.hideme::before{width:17px;height:max(17px,1.1em);background-repeat:no-repeat;background-position:top left;display:inline-block;content:"";}details.rustdoc-toggle[open] >summary::after,details.rustdoc-toggle[open] >summary.hideme::after{content:"Collapse";}details.undocumented>summary::before{padding-left:17px;height:max(17px,1.1em);background-repeat:no-repeat;background-position:top left;content:"Show hidden undocumented items";cursor:pointer;font-size:16px;font-weight:300;opacity:.5;}details.undocumented>summary:focus::before,details.undocumented>summary:hover::before{opacity:1;}details.undocumented[open] >summary::before{padding-left:17px;height:max(17px,1.1em);background-repeat:no-repeat background-position:top left;content:"Hide undocumented items";}@media (min-width:701px){.docblock>.information:first-child>.tooltip{margin-top:16px;}}@media (max-width:700px){body{padding-top:0px;}.rustdoc>.sidebar{height:45px;min-height:40px;margin:0;margin-left:-15px;padding:0 15px;position:static;z-index:11;}.sidebar>.location{float:right;margin:0px;margin-top:2px;padding:3px 10px 1px 10px;min-height:39px;background:inherit;text-align:left;font-size:24px;}.sidebar .location:empty{padding:0;}.sidebar .logo-container{width:35px;height:35px;margin-top:5px;margin-bottom:5px;float:left;margin-left:50px;}.sidebar .logo-container>img{max-width:35px;max-height:35px;}.sidebar-menu{position:fixed;z-index:10;font-size:2rem;cursor:pointer;width:45px;left:0;text-align:center;display:block;border-bottom:1px solid;border-right:1px solid;height:45px;}.rustdoc.source>.sidebar>.sidebar-menu{display:none;}.sidebar-elems{position:fixed;z-index:1;top:45px;bottom:0;width:246px;left:-246px;overflow-y:auto;border-right:1px solid;}.sidebar>.block.version{overflow:hidden;border-bottom:none;margin-bottom:0;height:100%;padding-left:12px;}.sidebar>.block.version>div.narrow-helper{float:left;width:1px;height:100%;}.sidebar>.block.version>p{margin:0;min-width:55px;display:flex;align-items:center;height:100%;}nav.sub{width:calc(100% - 32px);float:right;}.content{margin-left:0px;}#main,#search{margin-top:45px;padding:0;}#search{margin-left:0;}.anchor{display:none !important;}.theme-picker{left:10px;top:54px;z-index:1;}.notable-traits{position:absolute;left:-22px;top:24px;}#titles>button>div.count{float:left;width:100%;}#titles{height:50px;}.sidebar.mobile{position:fixed;width:100%;margin-left:0;background-color:rgba(0,0,0,0);height:100%;}.sidebar.mobile>div.version{overflow:hidden;max-height:33px;}.sidebar{width:calc(100% + 30px);}.show-it,.sidebar-elems:focus-within{z-index:2;left:0;}.show-it>.block.items{margin:8px 0;}.show-it>.block.items>ul{margin:0;}.show-it>.block.items>ul>li{text-align:center;margin:2px 0;}.show-it>.block.items>ul>li>a{font-size:21px;}#sidebar-filler{position:fixed;left:45px;width:calc(100% - 45px);top:0;height:45px;z-index:-1;border-bottom:1px solid;}#main>details.rustdoc-toggle>summary::before,#main>div>details.rustdoc-toggle>summary::before{left:-11px;}#all-types{margin:10px;}#sidebar-toggle{top:100px;width:30px;font-size:1.5rem;text-align:center;padding:0;}#source-sidebar{z-index:11;}#main>.line-numbers{margin-top:0;}.notable-traits .notable-traits-tooltiptext{left:0;top:100%;}#help-button{display:none;}.item-table{display:flex;flex-flow:column wrap;}.item-left,.item-right{width:100%;}.search-container>div{width:calc(100% - 32px);}.search-results>a{border-bottom:1px solid #aaa9;padding:5px 0px;}.search-results .result-name,.search-results div.desc,.search-results .result-description{width:100%;}.search-results div.desc,.search-results .result-description,.item-right{padding-left:2em;}}@media print{nav.sub,.content .out-of-band{display:none;}}@media (max-width:464px){#titles,#titles>button{height:73px;}#main,#search{margin-top:100px;}#main>table:not(.table-display) td{word-break:break-word;width:50%;}.search-container>div{display:block;width:calc(100% - 37px);}#crate-search{width:100%;border-radius:4px;border:0;}#crate-search+.search-input{width:calc(100% + 71px);margin-left:-36px;}#theme-picker,#settings-menu{padding:5px;width:31px;height:31px;}#theme-picker{margin-top:-2px;}#settings-menu{top:7px;}.docblock{margin-left:12px;}}details.undocumented[open] >summary::before,details.rustdoc-toggle[open] >summary::before,details.rustdoc-toggle[open] >summary.hideme::before{background-image:url(toggle-minus.svg);}details.undocumented>summary::before,details.rustdoc-toggle>summary::before{background-image:url(toggle-plus.svg);}
\ No newline at end of file
diff --git a/search-index.js b/search-index.js
new file mode 100644
index 0000000..9c5bed1
--- /dev/null
+++ b/search-index.js
@@ -0,0 +1,4 @@
+var searchIndex = JSON.parse('{\
+"libmedium":{"doc":"","t":[6,17,3,17,17,17,17,3,3,17,17,12,11,11,12,0,12,11,11,5,11,11,5,0,0,0,12,5,0,12,11,11,11,11,6,3,11,11,12,11,11,11,11,11,11,11,11,11,11,3,11,11,11,11,3,11,11,11,11,11,11,12,11,11,11,0,11,5,11,11,11,11,11,11,11,12,11,11,3,11,11,12,11,12,11,11,11,11,11,11,3,3,8,11,11,11,11,11,11,11,12,11,11,11,0,12,11,11,11,3,11,11,11,0,5,10,10,11,11,11,11,11,11,11,11,11,11,11,11,6,6,3,3,3,3,3,3,3,3,3,6,6,17,17,3,3,17,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,11,12,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,3,11,11,11,11,11,11,12,11,11,11,12,11,17,3,11,11,11,11,12,11,12,5,11,11,11,11,3,3,11,11,11,11,5,11,11,11,11,12,11,11,12,11,11,11,11,11,11,11,12,11,12,12,12,12,11,11,11,11,11,11,11,11,11,11,12],"n":["AppData","CACHE_AGE","Data","GIT_COMMIT_HASH","PKG_DESCRIPTION","PKG_HOMEPAGE","PKG_NAME","SETTINGS","Settings","V1_API_ROUTES","VERSION","__private_field","borrow","borrow_mut","client","data","debug","deref","from","get_json_err","initialize","into","main","meta","proxy","routes","server","services","settings","source_code","try_from","try_into","type_id","vzip","AppData","Data","borrow","borrow_mut","client","clone","clone_into","from","into","new","to_owned","try_from","try_into","type_id","vzip","BuildDetails","borrow","borrow","borrow_mut","borrow_mut","build_details","clone","clone_into","deserialize","fmt","from","from","git_commit_hash","into","into","register","routes","serialize","services","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","version","vzip","vzip","Meta","borrow","borrow_mut","build_details","from","health","into","new","try_from","try_into","type_id","vzip","GetPost","Post","StringUtils","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","build_query","data","from","from","from","get_post","id","into","into","into","page","register","render_once","render_once_to","routes","services","slice","substring","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","Boolean","Float","GetPostPost","GetPostPostContent","GetPostPostContentBodyModel","GetPostPostContentBodyModelParagraphs","GetPostPostContentBodyModelParagraphsIframe","GetPostPostContentBodyModelParagraphsIframeMediaResource","GetPostPostContentBodyModelParagraphsMarkups","GetPostPostContentBodyModelParagraphsMetadata","GetPostPostCreator","ID","Int","OPERATION_NAME","QUERY","ResponseData","Variables","__QUERY_WORKAROUND","anchor_type","body_model","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","content","created_at","creator","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","deserialize","end","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","href","href","href","id","id","id","iframe","iframe_height","iframe_src","iframe_width","into","into","into","into","into","into","into","into","into","into","into","layout","markups","media_resource","metadata","name","original_height","original_width","paragraphs","post","serialize","start","text","title","title","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_","type_","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","user_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","Proxy","borrow","borrow_mut","from","get_page","into","new","page","try_from","try_into","type_id","update","vzip","ROUTES","Routes","borrow","borrow_mut","from","into","meta","new","proxy","services","try_from","try_into","type_id","vzip","Server","Settings","borrow","borrow","borrow_mut","borrow_mut","check_url","clone","clone","clone_into","clone_into","debug","deserialize","deserialize","domain","fmt","fmt","from","from","get_ip","into","into","ip","new","port","proxy_has_tls","server","source_code","to_owned","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","workers"],"q":["libmedium","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","libmedium::data","","","","","","","","","","","","","","","libmedium::meta","","","","","","","","","","","","","","","","","","","","","","","","","","","","","libmedium::meta::routes","","","","","","","","","","","","libmedium::proxy","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","libmedium::proxy::get_post","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","libmedium::proxy::routes","","","","","","","","","","","","","libmedium::routes","","","","","","","","","","","","","","libmedium::settings","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","emmits build details of the bninary","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,0,0,0,0,0,0,0,0,1,1,1,2,0,3,1,1,0,1,1,0,0,0,0,3,0,0,3,1,1,1,1,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,0,4,5,4,5,0,4,4,4,4,4,5,4,4,5,5,0,4,0,4,4,5,4,5,4,5,4,4,5,0,6,6,6,6,6,6,6,6,6,6,6,0,0,0,7,8,9,7,8,9,7,8,7,8,9,0,8,7,8,9,0,9,8,8,0,0,10,10,7,8,9,7,8,9,7,8,9,7,8,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,12,13,14,15,11,16,17,12,18,19,20,21,13,14,15,11,16,17,12,18,19,20,21,19,19,19,13,14,15,11,16,17,12,18,19,20,11,13,14,15,11,16,17,12,18,19,20,13,14,15,11,16,17,12,18,19,20,21,14,11,16,13,18,21,16,14,14,14,13,14,15,11,16,17,12,18,19,20,21,16,16,15,16,18,13,13,17,20,21,11,16,11,19,13,14,15,11,16,17,12,18,19,20,21,13,14,15,11,16,17,12,18,19,20,21,11,16,13,14,15,11,16,17,12,18,19,20,21,11,13,14,15,11,16,17,12,18,19,20,21,0,22,22,22,22,22,22,22,22,22,22,22,22,0,0,23,23,23,23,23,23,23,0,23,23,23,23,0,0,24,3,24,3,0,24,3,24,3,3,24,3,24,24,3,24,3,24,24,3,24,3,24,24,3,3,24,3,24,3,24,3,24,3,24,3,24],"f":[null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],null,null,null,[[],["settings",3]],[[]],[[],["jsonconfig",3]],[[]],[[]],[[],["result",6]],null,null,null,null,[[["serviceconfig",3]]],null,null,[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],null,null,[[]],[[]],null,[[],["data",3]],[[]],[[]],[[]],[[],["appdata",6]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],null,[[]],[[]],[[]],[[]],null,[[],["builddetails",3]],[[]],[[],["result",4]],[[["formatter",3]],["result",6]],[[]],[[]],null,[[]],[[]],[[["appservice",3]]],null,[[],["result",4]],[[["serviceconfig",3]]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],null,[[]],[[]],null,[[]],[[]],null,[[]],null,[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[],["querybody",3]],null,[[]],[[]],[[]],null,null,[[]],[[]],[[]],null,[[["appservice",3]]],[[],["renderresult",6]],[[["buffer",3]],[["rendererror",4],["result",4,["rendererror"]]]],null,[[["serviceconfig",3]]],[[],["str",15]],[[["usize",15]],["str",15]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,null,null,null,null,null,null,null,null,[[],["result",4]],null,null,null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],null,null,[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,[[]],[[]],[[]],[[["str",15]],["string",3]],[[]],[[]],null,[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,[[]],null,null,[[]],[[]],[[]],[[]],null,[[]],null,[[["serviceconfig",3]]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[]],null,null,[[]],[[]],[[]],[[]],[[["config",3]]],[[],["server",3]],[[],["settings",3]],[[]],[[]],null,[[],["result",4]],[[],["result",4]],null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[],["string",3]],[[]],[[]],null,[[],[["result",4,["configerror"]],["configerror",4]]],null,null,null,null,[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[]],[[]],null],"p":[[3,"SETTINGS"],[3,"Data"],[3,"Settings"],[3,"BuildDetails"],[3,"build_details"],[3,"Meta"],[3,"GetPost"],[3,"Post"],[3,"page"],[8,"StringUtils"],[3,"GetPostPostContentBodyModelParagraphsMarkups"],[3,"GetPostPostContent"],[3,"GetPostPostContentBodyModelParagraphsMetadata"],[3,"GetPostPostContentBodyModelParagraphsIframeMediaResource"],[3,"GetPostPostContentBodyModelParagraphsIframe"],[3,"GetPostPostContentBodyModelParagraphs"],[3,"GetPostPostContentBodyModel"],[3,"GetPostPostCreator"],[3,"GetPostPost"],[3,"ResponseData"],[3,"Variables"],[3,"Proxy"],[3,"Routes"],[3,"Server"]]}\
+}');
+if (window.initSearch) {window.initSearch(searchIndex)};
\ No newline at end of file
diff --git a/search.js b/search.js
new file mode 100644
index 0000000..91de2a1
--- /dev/null
+++ b/search.js
@@ -0,0 +1 @@
+(function(){var itemTypes=["mod","externcrate","import","struct","enum","fn","type","static","trait","impl","tymethod","method","structfield","variant","macro","primitive","associatedtype","constant","associatedconstant","union","foreigntype","keyword","existential","attr","derive","traitalias"];var TY_PRIMITIVE=itemTypes.indexOf("primitive");var TY_KEYWORD=itemTypes.indexOf("keyword");function printTab(nb){if(nb===0||nb===1||nb===2){searchState.currentTab=nb}var nb_copy=nb;onEachLazy(document.getElementById("titles").childNodes,function(elem){if(nb_copy===0){addClass(elem,"selected")}else{removeClass(elem,"selected")}nb_copy-=1});onEachLazy(document.getElementById("results").childNodes,function(elem){if(nb===0){addClass(elem,"active")}else{removeClass(elem,"active")}nb-=1})}function removeEmptyStringsFromArray(x){for(var i=0,len=x.length;i-1){var obj=searchIndex[results[i].id];obj.lev=results[i].lev;var res=buildHrefAndPath(obj);obj.displayPath=pathSplitter(res[0]);obj.fullPath=obj.displayPath+obj.name;obj.fullPath+="|"+obj.ty;obj.href=res[1];out.push(obj);if(out.length>=MAX_RESULTS){break}}}return out}function sortResults(results,isType){var ar=[];for(var entry in results){if(hasOwnPropertyRustdoc(results,entry)){ar.push(results[entry])}}results=ar;var i,len,result;for(i=0,len=results.length;ib?+1:-1)}a=(aaa.index<0);b=(bbb.index<0);if(a!==b){return a-b}a=aaa.index;b=bbb.index;if(a!==b){return a-b}if((aaa.item.ty===TY_PRIMITIVE&&bbb.item.ty!==TY_KEYWORD)||(aaa.item.ty===TY_KEYWORD&&bbb.item.ty!==TY_PRIMITIVE)){return-1}if((bbb.item.ty===TY_PRIMITIVE&&aaa.item.ty!==TY_PRIMITIVE)||(bbb.item.ty===TY_KEYWORD&&aaa.item.ty!==TY_KEYWORD)){return 1}a=(aaa.item.desc==="");b=(bbb.item.desc==="");if(a!==b){return a-b}a=aaa.item.ty;b=bbb.item.ty;if(a!==b){return a-b}a=aaa.item.path;b=bbb.item.path;if(a!==b){return(a>b?+1:-1)}return 0});for(i=0,len=results.length;i"));return{name:val.substring(0,val.indexOf("<")),generics:values.split(/\s*,\s*/),}}return{name:val,generics:[],}}function checkGenerics(obj,val){var tmp_lev,elem_name;if(val.generics.length>0){if(obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>=val.generics.length){var elems=Object.create(null);var elength=obj[GENERICS_DATA].length;for(var x=0;xGENERICS_DATA&&obj[GENERICS_DATA].length>0){var elems=Object.create(null);len=obj[GENERICS_DATA].length;for(x=0;xGENERICS_DATA&&obj[GENERICS_DATA].length!==0){var tmp_lev=checkGenerics(obj,val);if(tmp_lev<=MAX_LEV_DISTANCE){return tmp_lev}}}}else if(literalSearch){if((!val.generics||val.generics.length===0)&&obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>0){return obj[GENERICS_DATA].some(function(name){return name===val.name})}return false}lev_distance=Math.min(levenshtein(obj[NAME],val.name),lev_distance);if(lev_distance<=MAX_LEV_DISTANCE){lev_distance=Math.ceil((checkGenerics(obj,val)+lev_distance)/2)}else if(obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>0){var olength=obj[GENERICS_DATA].length;for(x=0;x0){var length=obj.type[INPUTS_DATA].length;for(var i=0;iOUTPUT_DATA){var ret=obj.type[OUTPUT_DATA];if(typeof ret[0]==="string"){ret=[ret]}for(var x=0,len=ret.length;xlength){return MAX_LEV_DISTANCE+1}for(var i=0;ilength){break}var lev_total=0;var aborted=false;for(var x=0;xMAX_LEV_DISTANCE){aborted=true;break}lev_total+=lev}if(!aborted){ret_lev=Math.min(ret_lev,Math.round(lev_total/clength))}}return ret_lev}function typePassesFilter(filter,type){if(filter<=NO_TYPE_FILTER)return true;if(filter===type)return true;var name=itemTypes[type];switch(itemTypes[filter]){case"constant":return name==="associatedconstant";case"fn":return name==="method"||name==="tymethod";case"type":return name==="primitive"||name==="associatedtype";case"trait":return name==="traitalias"}return false}function createAliasFromItem(item){return{crate:item.crate,name:item.name,path:item.path,desc:item.desc,ty:item.ty,parent:item.parent,type:item.type,is_alias:true,}}function handleAliases(ret,query,filterCrates){var aliases=[];var crateAliases=[];if(filterCrates!==undefined){if(ALIASES[filterCrates]&&ALIASES[filterCrates][query.search]){var query_aliases=ALIASES[filterCrates][query.search];var len=query_aliases.length;for(var i=0;iMAX_RESULTS){ret.others.pop()}};onEach(aliases,pushFunc);onEach(crateAliases,pushFunc)}var nSearchWords=searchWords.length;var i,it;var ty;var fullId;var returned;var in_args;var len;if((val.charAt(0)==="\""||val.charAt(0)==="'")&&val.charAt(val.length-1)===val.charAt(0)){val=extractGenerics(val.substr(1,val.length-2));for(i=0;i")>-1){var trimmer=function(s){return s.trim()};var parts=val.split("->").map(trimmer);var input=parts[0];var inputs=input.split(",").map(trimmer).sort();for(i=0,len=inputs.length;i1?paths.length-1:1);var lev,j;for(j=0;j1){lev=checkPath(contains,paths[paths.length-1],ty);if(lev>MAX_LEV_DISTANCE){continue}else if(lev>0){lev_add=lev/10}}returned=MAX_LEV_DISTANCE+1;in_args=MAX_LEV_DISTANCE+1;var index=-1;lev=MAX_LEV_DISTANCE+1;fullId=ty.id;if(searchWords[j].indexOf(split[i])>-1||searchWords[j].indexOf(val)>-1||ty.normalizedName.indexOf(val)>-1){if(typePassesFilter(typeFilter,ty.ty)&&results[fullId]===undefined){index=ty.normalizedName.indexOf(val)}}if((lev=levenshtein(searchWords[j],val))<=MAX_LEV_DISTANCE){if(typePassesFilter(typeFilter,ty.ty)){lev+=1}else{lev=MAX_LEV_DISTANCE+1}}in_args=findArg(ty,valGenerics,false,typeFilter);returned=checkReturned(ty,valGenerics,false,typeFilter);lev+=lev_add;if(lev>0&&val.length>3&&searchWords[j].indexOf(val)>-1){if(val.length<6){lev-=1}else{lev=0}}if(in_args<=MAX_LEV_DISTANCE){if(results_in_args[fullId]===undefined){results_in_args[fullId]={id:j,index:index,lev:in_args,}}results_in_args[fullId].lev=Math.min(results_in_args[fullId].lev,in_args)}if(returned<=MAX_LEV_DISTANCE){if(results_returned[fullId]===undefined){results_returned[fullId]={id:j,index:index,lev:returned,}}results_returned[fullId].lev=Math.min(results_returned[fullId].lev,returned)}if(typePassesFilter(typeFilter,ty.ty)&&(index!==-1||lev<=MAX_LEV_DISTANCE)){if(index!==-1&&paths.length<2){lev=0}if(results[fullId]===undefined){results[fullId]={id:j,index:index,lev:lev,}}results[fullId].lev=Math.min(results[fullId].lev,lev)}}}var ret={"in_args":sortResults(results_in_args,true),"returned":sortResults(results_returned,true),"others":sortResults(results,false),};handleAliases(ret,query,filterCrates);return ret}function validateResult(name,path,keys,parent){for(var i=0,len=keys.length;i-1||path.indexOf(keys[i])>-1||(parent!==undefined&&parent.name!==undefined&&parent.name.toLowerCase().indexOf(keys[i])>-1)||levenshtein(name,keys[i])<=MAX_LEV_DISTANCE)){return false}}return true}function getQuery(raw){var matches,type,query;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 nextTab(direction){var next=(searchState.currentTab+direction+3)%searchState.focusedByTab.length;searchState.focusedByTab[searchState.currentTab]=document.activeElement;printTab(next);focusSearchResult()}function focusSearchResult(){var target=searchState.focusedByTab[searchState.currentTab]||document.querySelectorAll(".search-results.active a").item(0)||document.querySelectorAll("#titles > button").item(searchState.currentTab);if(target){target.focus()}}function buildHrefAndPath(item){var displayPath;var href;var type=itemTypes[item.ty];var name=item.name;var path=item.path;if(type==="mod"){displayPath=path+"::";href=window.rootPath+path.replace(/::/g,"/")+"/"+name+"/index.html"}else if(type==="primitive"||type==="keyword"){displayPath="";href=window.rootPath+path.replace(/::/g,"/")+"/"+type+"."+name+".html"}else if(type==="externcrate"){displayPath="";href=window.rootPath+name+"/index.html"}else if(item.parent!==undefined){var myparent=item.parent;var anchor="#"+type+"."+name;var parentType=itemTypes[myparent.ty];var pageType=parentType;var pageName=myparent.name;if(parentType==="primitive"){displayPath=myparent.name+"::"}else if(type==="structfield"&&parentType==="variant"){var enumNameIdx=item.path.lastIndexOf("::");var enumName=item.path.substr(enumNameIdx+2);path=item.path.substr(0,enumNameIdx);displayPath=path+"::"+enumName+"::"+myparent.name+"::";anchor="#variant."+myparent.name+".field."+name;pageType="enum";pageName=enumName}else{displayPath=path+"::"+myparent.name+"::"}href=window.rootPath+path.replace(/::/g,"/")+"/"+pageType+"."+pageName+".html"+anchor}else{displayPath=item.path+"::";href=window.rootPath+item.path.replace(/::/g,"/")+"/"+type+"."+name+".html"}return[displayPath,href]}function escape(content){var h1=document.createElement("h1");h1.textContent=content;return h1.innerHTML}function pathSplitter(path){var tmp=""+path.replace(/::/g,"::");if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6)}return tmp}function addTab(array,query,display){var extraClass="";if(display===true){extraClass=" active"}var output=document.createElement("div");var duplicates={};var length=0;if(array.length>0){output.className="search-results "+extraClass;array.forEach(function(item){if(item.is_alias!==true){if(duplicates[item.fullPath]){return}duplicates[item.fullPath]=true}var name=item.name;var type=itemTypes[item.ty];length+=1;var extra="";if(type==="primitive"){extra=" (primitive type)"}else if(type==="keyword"){extra=" (keyword)"}var link=document.createElement("a");link.className="result-"+type;link.href=item.href;var wrapper=document.createElement("div");var resultName=document.createElement("div");resultName.className="result-name";if(item.is_alias){var alias=document.createElement("span");alias.className="alias";var bold=document.createElement("b");bold.innerText=item.alias;alias.appendChild(bold);alias.insertAdjacentHTML("beforeend"," - see ");resultName.appendChild(alias)}resultName.insertAdjacentHTML("beforeend",item.displayPath+""+name+extra+"");wrapper.appendChild(resultName);var description=document.createElement("div");description.className="desc";var spanDesc=document.createElement("span");spanDesc.insertAdjacentHTML("beforeend",item.desc);description.appendChild(spanDesc);wrapper.appendChild(description);link.appendChild(wrapper);output.appendChild(link)})}else{output.className="search-failed"+extraClass;output.innerHTML="No results :( "+"Try on DuckDuckGo?
"+"Or try looking in one of these:
The Rust Reference "+" for technical details about the language.
/*
+ * Copyright (C) 2021 Aravinth Manivannan <realaravinth@batsense.net>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+useactix_web::web;
+usereqwest::Client;
+
+#[derive(Clone)]
+pubstructData {
+ pubclient: Client,
+}
+
+pubtypeAppData=web::Data<Data>;
+
+implData {
+ pubfnnew() ->AppData {
+ AppData::new(Self {
+ client: Client::new(),
+ })
+ }
+}
+
+
+
+
\ No newline at end of file
diff --git a/src/libmedium/main.rs.html b/src/libmedium/main.rs.html
new file mode 100644
index 0000000..5f7b109
--- /dev/null
+++ b/src/libmedium/main.rs.html
@@ -0,0 +1,198 @@
+main.rs - source
/*
+ * Copyright (C) 2021 Aravinth Manivannan <realaravinth@batsense.net>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+usestd::env;
+
+useactix_web::{
+ error::InternalError, http::StatusCode, middlewareasactix_middleware, web::JsonConfig, App,
+ HttpServer,
+};
+uselazy_static::lazy_static;
+uselog::info;
+
+moddata;
+modmeta;
+modproxy;
+modroutes;
+modsettings;
+
+pubusedata::AppData;
+pubusedata::Data;
+pubuseroutes::ROUTESasV1_API_ROUTES;
+pubusesettings::Settings;
+
+lazy_static! {
+ pubstaticrefSETTINGS: Settings=Settings::new().unwrap();
+}
+
+pubconstCACHE_AGE: u32=604800;
+
+pubconstGIT_COMMIT_HASH: &str=env!("GIT_HASH");
+pubconstVERSION: &str=env!("CARGO_PKG_VERSION");
+pubconstPKG_NAME: &str=env!("CARGO_PKG_NAME");
+pubconstPKG_DESCRIPTION: &str=env!("CARGO_PKG_DESCRIPTION");
+pubconstPKG_HOMEPAGE: &str=env!("CARGO_PKG_HOMEPAGE");
+
+#[cfg(not(tarpaulin_include))]
+#[actix_web::main]
+asyncfnmain() ->std::io::Result<()> {
+ env::set_var("RUST_LOG", "info");
+
+ pretty_env_logger::init();
+
+ info!(
+ "{}: {}.\nFor more information, see: {}\nBuild info:\nVersion: {} commit: {}",
+ PKG_NAME, PKG_DESCRIPTION, PKG_HOMEPAGE, VERSION, GIT_COMMIT_HASH
+ );
+
+ println!("Starting server on: http://{}", SETTINGS.server.get_ip());
+
+ letdata=Data::new();
+
+ HttpServer::new(move|| {
+ App::new()
+ .wrap(actix_middleware::Logger::default())
+ .wrap(actix_middleware::Compress::default())
+ .app_data(get_json_err())
+ .wrap(
+ actix_middleware::DefaultHeaders::new()
+ .header("Permissions-Policy", "interest-cohort=()"),
+ )
+ .wrap(actix_middleware::NormalizePath::new(
+ actix_middleware::TrailingSlash::Trim,
+ ))
+ .app_data(data.clone())
+ .configure(services)
+ })
+ .workers(SETTINGS.server.workers.unwrap_or_else(num_cpus::get))
+ .bind(SETTINGS.server.get_ip())
+ .unwrap()
+ .run()
+ .await
+}
+
+#[cfg(not(tarpaulin_include))]
+pubfnget_json_err() ->JsonConfig {
+ JsonConfig::default().error_handler(|err, _| {
+ //debug!("JSON deserialization error: {:?}", &err);
+ InternalError::new(err, StatusCode::BAD_REQUEST).into()
+ })
+}
+
+pubfnservices(cfg: &mutactix_web::web::ServiceConfig) {
+ routes::services(cfg);
+}
+
+
+
+
\ No newline at end of file
diff --git a/src/libmedium/meta.rs.html b/src/libmedium/meta.rs.html
new file mode 100644
index 0000000..efa6384
--- /dev/null
+++ b/src/libmedium/meta.rs.html
@@ -0,0 +1,160 @@
+meta.rs - source
/*
+ * Copyright (C) 2021 Aravinth Manivannan <realaravinth@batsense.net>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+useactix_web::{web, HttpResponse, Responder};
+useserde::{Deserialize, Serialize};
+
+usecrate::{GIT_COMMIT_HASH, VERSION};
+
+#[derive(Clone, Debug, Deserialize, Serialize)]
+pubstructBuildDetails {
+ pubversion: &'staticstr,
+ pubgit_commit_hash: &'staticstr,
+}
+
+pubmodroutes {
+ pubstructMeta {
+ pubbuild_details: &'staticstr,
+ pubhealth: &'staticstr,
+ }
+
+ implMeta {
+ pubconstfnnew() ->Self {
+ Self {
+ build_details: "/api/v1/meta/build",
+ health: "/api/v1/meta/health",
+ }
+ }
+ }
+}
+
+/// emmits build details of the bninary
+#[my_codegen::get(path="crate::V1_API_ROUTES.meta.build_details")]
+asyncfnbuild_details() ->implResponder {
+ letbuild=BuildDetails {
+ version: VERSION,
+ git_commit_hash: GIT_COMMIT_HASH,
+ };
+ HttpResponse::Ok().json(build)
+}
+
+pubfnservices(cfg: &mutweb::ServiceConfig) {
+ cfg.service(build_details);
+}
+
+#[cfg(test)]
+modtests {
+ useactix_web::{http::StatusCode, test, App};
+
+ usecrate::services;
+ usecrate::*;
+
+ #[actix_rt::test]
+ asyncfnbuild_details_works() {
+ letapp=test::init_service(App::new().configure(services)).await;
+
+ letresp=test::call_service(
+ &app,
+ test::TestRequest::get()
+ .uri(V1_API_ROUTES.meta.build_details)
+ .to_request(),
+ )
+ .await;
+ assert_eq!(resp.status(), StatusCode::OK);
+ }
+}
+
+
+
+
\ No newline at end of file
diff --git a/src/libmedium/proxy.rs.html b/src/libmedium/proxy.rs.html
new file mode 100644
index 0000000..4020ef3
--- /dev/null
+++ b/src/libmedium/proxy.rs.html
@@ -0,0 +1,338 @@
+proxy.rs - source
/*
+ * Copyright (C) 2021 Aravinth Manivannan <realaravinth@batsense.net>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+useactix_web::web;
+
+usecrate::meta::routes::Meta;
+usecrate::proxy::routes::Proxy;
+
+pubconstROUTES: Routes=Routes::new();
+
+pubstructRoutes {
+ pubmeta: Meta,
+ pubproxy: Proxy,
+}
+
+implRoutes {
+ pubconstfnnew() ->Self {
+ Self {
+ meta: Meta::new(),
+ proxy: Proxy::new(),
+ }
+ }
+}
+
+pubfnservices(cfg: &mutweb::ServiceConfig) {
+ crate::meta::services(cfg);
+ crate::proxy::services(cfg);
+}
+
+
+
+
\ No newline at end of file
diff --git a/src/libmedium/settings.rs.html b/src/libmedium/settings.rs.html
new file mode 100644
index 0000000..5badee3
--- /dev/null
+++ b/src/libmedium/settings.rs.html
@@ -0,0 +1,198 @@
+settings.rs - source
/*
+ * Copyright (C) 2021 Aravinth Manivannan <realaravinth@batsense.net>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+usestd::env;
+usestd::path::Path;
+
+useconfig::{Config, ConfigError, Environment, File};
+uselog::warn;
+useserde::Deserialize;
+useurl::Url;
+
+#[derive(Debug, Clone, Deserialize)]
+pubstructServer {
+ pubport: u32,
+ pubdomain: String,
+ pubip: String,
+ pubproxy_has_tls: bool,
+ pubworkers: Option<usize>,
+}
+
+implServer {
+ #[cfg(not(tarpaulin_include))]
+ pubfnget_ip(&self) ->String {
+ format!("{}:{}", self.ip, self.port)
+ }
+}
+
+#[derive(Debug, Clone, Deserialize)]
+pubstructSettings {
+ pubdebug: bool,
+ // pub database: Database,
+ pubserver: Server,
+ pubsource_code: String,
+}
+
+#[cfg(not(tarpaulin_include))]
+implSettings {
+ pubfnnew() ->Result<Self, ConfigError> {
+ letmuts=Config::new();
+
+ // setting default values
+ #[cfg(test)]
+ s.set_default("database.pool", 2.to_string())
+ .expect("Couldn't get the number of CPUs");
+
+ constCURRENT_DIR: &str="./config/default.toml";
+ constETC: &str="/etc/libmedium/config.toml";
+
+ ifletOk(path) =env::var("LIBMEDIUM") {
+ s.merge(File::with_name(&path))?;
+ } elseifPath::new(CURRENT_DIR).exists() {
+ // merging default config from file
+ s.merge(File::with_name(CURRENT_DIR))?;
+ } elseifPath::new(ETC).exists() {
+ s.merge(File::with_name(ETC))?;
+ } else {
+ log::warn!("configuration file not found");
+ }
+
+ s.merge(Environment::with_prefix("PAGES").separator("__"))?;
+
+ check_url(&s);
+
+ matchenv::var("PORT") {
+ Ok(val) => {
+ s.set("server.port", val).unwrap();
+ }
+ Err(e) =>warn!("couldn't interpret PORT: {}", e),
+ }
+
+ letsettings: Settings=s.try_into()?;
+
+ Ok(settings)
+ }
+}
+
+#[cfg(not(tarpaulin_include))]
+fncheck_url(s: &Config) {
+ leturl=s
+ .get::<String>("source_code")
+ .expect("Couldn't access source_code");
+
+ Url::parse(&url).expect("Please enter a URL for source_code in settings");
+}
+
+
+
+
\ No newline at end of file
diff --git a/storage.js b/storage.js
new file mode 100644
index 0000000..6b16cbd
--- /dev/null
+++ b/storage.js
@@ -0,0 +1 @@
+var resourcesSuffix="";var darkThemes=["dark","ayu"];window.currentTheme=document.getElementById("themeStyle");window.mainTheme=document.getElementById("mainThemeStyle");var settingsDataset=(function(){var settingsElement=document.getElementById("default-settings");if(settingsElement===null){return null}var dataset=settingsElement.dataset;if(dataset===undefined){return null}return dataset})();function getSettingValue(settingName){var current=getCurrentValue('rustdoc-'+settingName);if(current!==null){return current}if(settingsDataset!==null){var def=settingsDataset[settingName.replace(/-/g,'_')];if(def!==undefined){return def}}return null}var localStoredTheme=getSettingValue("theme");var savedHref=[];function hasClass(elem,className){return elem&&elem.classList&&elem.classList.contains(className)}function addClass(elem,className){if(!elem||!elem.classList){return}elem.classList.add(className)}function removeClass(elem,className){if(!elem||!elem.classList){return}elem.classList.remove(className)}function onEach(arr,func,reversed){if(arr&&arr.length>0&&func){var length=arr.length;var i;if(reversed){for(i=length-1;i>=0;--i){if(func(arr[i])){return true}}}else{for(i=0;i=0){updateLocalStorage("rustdoc-preferred-dark-theme",localStoredTheme)}updateSystemTheme()}else{switchTheme(window.currentTheme,window.mainTheme,getSettingValue("theme")||"light",false)}
\ No newline at end of file
diff --git a/toggle-minus.svg b/toggle-minus.svg
new file mode 100644
index 0000000..7315478
--- /dev/null
+++ b/toggle-minus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/toggle-plus.svg b/toggle-plus.svg
new file mode 100644
index 0000000..08b1703
--- /dev/null
+++ b/toggle-plus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/wheel.svg b/wheel.svg
new file mode 100644
index 0000000..01da3b2
--- /dev/null
+++ b/wheel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file