From 4fafa36424d0ca83a1507b3c39a899b3ec962200 Mon Sep 17 00:00:00 2001 From: Sebastien Guillemot Date: Wed, 19 Aug 2020 00:27:52 +0900 Subject: [PATCH] First draft for documentation (#52) --- .gitignore | 1 + .readthedocs.yml | 11 ++ README.md | 63 +--------- README.rst | 118 ++++++++++++++++++ doc/.gitignore | 1 + doc/.sphinx/_templates/layout.html | 7 ++ doc/.sphinx/cardano-logo.png | Bin 0 -> 15171 bytes doc/.sphinx/requirements.txt | 31 +++++ doc/conf.py | 115 +++++++++++++++++ doc/getting-started/prerequisite-knowledge.md | 5 + doc/index.rst | 15 +++ 11 files changed, 305 insertions(+), 62 deletions(-) create mode 100644 .readthedocs.yml create mode 100644 README.rst create mode 100644 doc/.gitignore create mode 100644 doc/.sphinx/_templates/layout.html create mode 100644 doc/.sphinx/cardano-logo.png create mode 100644 doc/.sphinx/requirements.txt create mode 100644 doc/conf.py create mode 100644 doc/getting-started/prerequisite-knowledge.md create mode 100644 doc/index.rst diff --git a/.gitignore b/.gitignore index 00fd270e..9802fe48 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules/ publish/ rust/target +.vscode/ \ No newline at end of file diff --git a/.readthedocs.yml b/.readthedocs.yml new file mode 100644 index 00000000..5853a2b5 --- /dev/null +++ b/.readthedocs.yml @@ -0,0 +1,11 @@ + +version: 2 + +sphinx: + configuration: doc/conf.py + +# Optionally set the version of Python and requirements required to build your docs +python: + version: 3.7 + install: + - requirements: doc/.sphinx/requirements.txt \ No newline at end of file diff --git a/README.md b/README.md index 9e766e90..a5efcf60 100644 --- a/README.md +++ b/README.md @@ -2,10 +2,6 @@ This is a library for serialization & deserialization of data structures used in Cardano's Haskell implementation of Shelley along with useful utility functions. -## How can I use this library - -Rust is wonderfully portable! You can easily bind to the native Rust library from any common programming language (even C and WebAssembly)! - ##### NPM packages - [NodeJS WASM package](https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-nodejs) @@ -15,63 +11,6 @@ Rust is wonderfully portable! You can easily bind to the native Rust library fro - [React-Native mobile bindings](https://github.com/Emurgo/react-native-haskell-shelley) -## Benefits of using this library - -Serialization/deserialization code is automatically generated from Cardano's official specification, which guarantees it can easily stay up to date! We do this using an EMURGO-written tool called [cddl-codegen](https://github.com/Emurgo/cddl-codegen) which can be re-used for other tasks such as automatically generate a Rust library for Cardano metadata specifications! - -It is also very easy to create scripts in Rust or WASM to share with stake pools, or even embed inside an online tool! No more crazy cardano-cli bash scripts! - -Powerful and flexible enough to be used to power wallets and exchanges! (Yes, it's used in production!) - ## Documentation -This library generates both [Typescript](https://www.typescriptlang.org/) and [Flow](https://flow.org/) type definitions, so it's often easiest to see what is possible by just looking at the types! -You can find the Flow types [here](/rust/pkg/cardano_serialization_lib.js.flow) - -You can also look in the [example](/example) folder to see how to use this library from Typescript or just experiment with the library. - -## What about other versions of Cardano? - -If you are looking for legacy bindings, you can find them at the following: - -- [Byron WASM bindings](https://github.com/input-output-hk/js-cardano-wasm/tree/master/cardano-wallet) -- [Jormungandr WASM bindings](https://github.com/emurgo/js-chain-libs) - -## Original binary specifications - -Here are the location of the original [CDDL](http://cbor.io/tools.html) specifications: - -- Byron: [link](https://github.com/input-output-hk/cardano-ledger-specs/tree/master/byron/cddl-spec) -- Shelley: [link](https://github.com/input-output-hk/cardano-ledger-specs/tree/master/shelley/chain-and-ledger/executable-spec/cddl-files) - -## Building - -If you need to install Rust, do the following: -``` -curl https://sh.rustup.rs -sSf | sh -s -- -y -echo 'export PATH=$HOME/.cargo/bin/:$PATH' >> $BASH_ENV -rustup install stable -rustup target add wasm32-unknown-unknown --toolchain stable -curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh -``` - -To build this repository, do the following: -``` -git submodule update --init --recursive -nvm use -npm install -npm run rust:build-nodejs -``` - -## Testing - -``` -npm run rust:test -``` - -## Publishing - -``` -npm run js:publish-nodejs -npm run js:publish-browser -``` +You can find documentation [here](https://docs.cardano.org/projects/cardano-serialization-lib/en/latest/) \ No newline at end of file diff --git a/README.rst b/README.rst new file mode 100644 index 00000000..b4d8a7d1 --- /dev/null +++ b/README.rst @@ -0,0 +1,118 @@ +Cardano Serialization Lib +========================= + +This is a library for serialization & deserialization of data structures +used in Cardano’s Haskell implementation of Shelley along with useful +utility functions. + +How can I use this library +-------------------------- + +Rust is wonderfully portable! You can easily bind to the native Rust +library from any common programming language (even C and WebAssembly)! + +NPM packages +'''''''''''' + +- `NodeJS WASM package`_ +- `Browser (chrome/firefox) WASM package`_ + +Mobile bindings +''''''''''''''' + +- `React-Native mobile bindings`_ + +Benefits of using this library +------------------------------ + +Serialization/deserialization code is automatically generated from +Cardano’s official specification, which guarantees it can easily stay up +to date! We do this using an EMURGO-written tool called `cddl-codegen`_ +which can be re-used for other tasks such as automatically generate a +Rust library for Cardano metadata specifications! + +It is also very easy to create scripts in Rust or WASM to share with +stake pools, or even embed inside an online tool! No more crazy +cardano-cli bash scripts! + +Powerful and flexible enough to be used to power wallets and exchanges! +(Yes, it’s used in production!) + +Documentation +------------- + +This library generates both `Typescript`_ and `Flow`_ type definitions, +so it’s often easiest to see what is possible by just looking at the +types! You can find the Flow types `here`_ + +You can also look in the `example`_ folder to see how to use this +library from Typescript or just experiment with the library. + +What about other versions of Cardano? +------------------------------------- + +If you are looking for legacy bindings, you can find them at the +following: + +- `Byron WASM bindings`_ +- `Jormungandr WASM bindings`_ + +Original binary specifications +------------------------------ + +Here are the location of the original `CDDL`_ specifications: + +- Byron: `link`_ +- Shelley: + `link `__ + +Building +-------- + +If you need to install Rust, do the following: + +:: + + curl https://sh.rustup.rs -sSf | sh -s -- -y + echo 'export PATH=$HOME/.cargo/bin/:$PATH' >> $BASH_ENV + rustup install stable + rustup target add wasm32-unknown-unknown --toolchain stable + curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh + +To build this repository, do the following: + +:: + + git submodule update --init --recursive + nvm use + npm install + npm run rust:build-nodejs + +Testing +------- + +:: + + npm run rust:test + +Publishing +---------- + +To publish new versions to NPM (only needed if you are an admin of this project) +:: + + npm run js:publish-nodejs + npm run js:publish-browser + +.. _NodeJS WASM package: https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-nodejs +.. _Browser (chrome/firefox) WASM package: https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-browser +.. _React-Native mobile bindings: https://github.com/Emurgo/react-native-haskell-shelley +.. _cddl-codegen: https://github.com/Emurgo/cddl-codegen +.. _Typescript: https://www.typescriptlang.org/ +.. _Flow: https://flow.org/ +.. _here: /rust/pkg/cardano_serialization_lib.js.flow +.. _example: /example +.. _Byron WASM bindings: https://github.com/input-output-hk/js-cardano-wasm/tree/master/cardano-wallet +.. _Jormungandr WASM bindings: https://github.com/emurgo/js-chain-libs +.. _CDDL: http://cbor.io/tools.html +.. _link: https://github.com/input-output-hk/cardano-ledger-specs/tree/master/byron/cddl-spec diff --git a/doc/.gitignore b/doc/.gitignore new file mode 100644 index 00000000..c6a151b3 --- /dev/null +++ b/doc/.gitignore @@ -0,0 +1 @@ +_build/ \ No newline at end of file diff --git a/doc/.sphinx/_templates/layout.html b/doc/.sphinx/_templates/layout.html new file mode 100644 index 00000000..661a1d96 --- /dev/null +++ b/doc/.sphinx/_templates/layout.html @@ -0,0 +1,7 @@ +{% extends "!layout.html" %} + +{% block footer %} +{{ super() }} + +{% endblock %} \ No newline at end of file diff --git a/doc/.sphinx/cardano-logo.png b/doc/.sphinx/cardano-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7233b4fb4dffa4e3c190d0a1a29ed62ab5c2b1b2 GIT binary patch literal 15171 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 + +.. toctree:: + :maxdepth: 3 + :caption: Getting Started + :titlesonly: + :hidden: + + getting-started/prerequisite-knowledge \ No newline at end of file