From 88799b392bc932d378dda4e19d3c8d6af0f8fb69 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Thu, 20 Jun 2024 06:16:18 +0100 Subject: [PATCH] Polished Markdown files - Reflowed Markdown files to align to common standards for authoring, aiding source readability. - Added links and link references. - Corrected typos for spelling etc. - Linked to the license file from Cargo.toml. --- CODE_OF_CONDUCT.md | 119 ++++++++++++++++++++++-------- CONTRIBUTING.md | 117 +++++++++++++++++++---------- CONTRIBUTORS.md | 21 ++++-- Cargo.toml | 1 + README.mdx | 85 +++++++++++++++++---- crates/identity/README.md | 5 +- crates/sdk/design-guide.md | 2 +- crates/sdk/macros/design-guide.md | 53 ++++++++----- 8 files changed, 293 insertions(+), 110 deletions(-) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 9ca7f0399..d1721a62d 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -1,79 +1,134 @@ # Contributor Covenant Code of Conduct for Calimero +[Contributor Covenant]: https://www.contributor-covenant.org + ## Our Pledge -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to make participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to make participation in our project and our +community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and +expression, level of experience, education, socio-economic status, nationality, +personal appearance, race, religion, or sexual identity and orientation. ## Our Standards -Examples of behavior that contributes to creating a positive environment include: +Examples of behavior that contributes to creating a positive environment +include: + + - Demonstrating empathy and kindness toward other people + + - Being respectful of differing opinions, viewpoints, and experiences + + - Giving and gracefully accepting constructive feedback + + - Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience -- Demonstrating empathy and kindness toward other people -- Being respectful of differing opinions, viewpoints, and experiences -- Giving and gracefully accepting constructive feedback -- Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience -- Focusing on what is best not just for us as individuals, but for the overall community + - Focusing on what is best not just for us as individuals, but for the overall + community Examples of unacceptable behavior by participants include: -- The use of sexualized language or imagery and unwelcome sexual attention or advances -- Trolling, insulting/derogatory comments, and personal or political attacks -- Public or private harassment -- Publishing others' private information, such as a physical or email address, without explicit permission -- Other conduct which could reasonably be considered inappropriate in a professional setting + - The use of sexualized language or imagery and unwelcome sexual attention or + advances + + - Trolling, insulting/derogatory comments, and personal or political attacks + + - Public or private harassment + + - Publishing others' private information, such as a physical or email address, + without explicit permission + + - Other conduct which could reasonably be considered inappropriate in a + professional setting ## Our Responsibilities -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. +Project maintainers have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, or to ban temporarily or permanently any +contributor for other behaviors that they deem inappropriate, threatening, +offensive, or harmful. ## Scope -This Code of Conduct applies within all project spaces, and it also applies when an individual is representing the project or its community in public spaces. Examples of representing a project or community include using an official project email address, posting via an official social media account, or acting as an appointed representative at an online or offline event. +This Code of Conduct applies within all project spaces, and it also applies when +an individual is representing the project or its community in public spaces. +Examples of representing a project or community include using an official +project email address, posting via an official social media account, or acting +as an appointed representative at an online or offline event. ## Enforcement -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at `info@calimero.network`. All complaints will be reviewed and investigated promptly and fairly. +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at `info@calimero.network`. All +complaints will be reviewed and investigated promptly and fairly. -All project maintainers are obligated to respect the privacy and security of the reporter of any incident. +All project maintainers are obligated to respect the privacy and security of the +reporter of any incident. ## Enforcement Guidelines -Project maintainers will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: +Project maintainers will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: ### Correction -**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. -**Consequence**: A private, written warning from project maintainers, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. +**Consequence**: A private, written warning from project maintainers, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. ### Warning -**Community Impact**: A violation through a single incident or series of actions. +**Community Impact**: A violation through a single incident or series of +actions. -**Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or permanent +ban. ### Temporary Ban -**Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. -**Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. ### Permanent Ban -**Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. -**Consequence**: A permanent ban from any sort of public interaction within the community. +**Consequence**: A permanent ban from any sort of public interaction within the +community. ## Attribution -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at [v2.1](https://www.contributor-covenant.org/version/2/1/code_of_conduct.html). - -Community Impact Guidelines were inspired by Mozilla's code of conduct enforcement ladder. +This Code of Conduct is adapted from the [Contributor Covenant][], +version 2.1, available at [v2.1](https://www.contributor-covenant.org/version/2/1/code_of_conduct.html). -For answers to common questions about this code of conduct, see the FAQ at [FAQ](https://www.contributor-covenant.org/faq). Translations are available at [translations](https://www.contributor-covenant.org/translations). +Community Impact Guidelines were inspired by Mozilla's code of conduct +enforcement ladder. -[homepage]: https://www.contributor-covenant.org +For answers to common questions about this code of conduct, see the FAQ at +[FAQ](https://www.contributor-covenant.org/faq). Translations are available at +[translations](https://www.contributor-covenant.org/translations). -For more information contact [info@calimero.network](mailto:info@calimero.network) with any additional questions or comments. +For more information contact [info@calimero.network](mailto:info@calimero.network) +with any additional questions or comments. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 36af1fbbc..1fc7d2d06 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,51 +1,78 @@ # Contribution Guide +[GitPR]: https://github.com/susam/gitpr +[Issues]: https://github.com/calimero-network/core/issues +[README]: README.mdx + Thank you for dedicating your time to contribute to our project. -This guide outlines the contribution workflow to make the process smooth and effective for everyone. +This guide outlines the contribution workflow to make the process smooth and +effective for everyone. -Start by reading the README to understand the project better. +Start by reading the [README][] to understand the project better. ## Project Status This project is actively being developed. -You can check out the open Issues, monitor the development progress, and contribute. +You can check out the open [Issues][], monitor the development progress, and +contribute. ## Getting Started There are several ways you can contribute: -- Solve open issues -- Report bugs or suggest features -- Enhance the documentation + - Solve open [Issues][] + - Report bugs or suggest features + - Enhance the documentation + +Contributions are managed via Issues and Pull Requests (PRs). Here are some +general guidelines: + + - Before creating a new Issue or PR, search for [existing ones][Issues]. + + - Contributions should focus on either functionality or style in the PR, not + both. + + - If you encounter an error, provide context. Explain what you are trying to + do and how to reproduce the error. -Contributions are managed via Issues and Pull Requests (PRs). Here are some general guidelines: + - Follow the repository’s formatting guidelines. -- Before creating a new Issue or PR, search for [existing ones](https://github.com/calimero-network/core/issues). -- Contributions should focus on either functionality or style in the PR, not both. -- If you encounter an error, provide context. Explain what you are trying to do and how to reproduce the error. -- Follow the repository’s formatting guidelines. -- Update the README.md file if your changes affect it. + - Update the [README][] file if your changes affect it. ## Issues -Use Issues to report problems, request features, or discuss changes before creating a PR. +Use [Issues][] to report problems, request features, or discuss changes before +creating a PR. ### Solving an Issue -Browse [existing issues](https://github.com/calimero-network/core/issues) to find one that interests you. +Browse [existing issues][Issues] to find one that interests you. ## Contribution Guidelines for Working on Issues -If someone is already working on an issue, they will either be officially assigned to it or have left a comment indicating they are working on it. If you would like to work on an issue, please follow these steps: +If someone is already working on an issue, they will either be officially +assigned to it or have left a comment indicating they are working on it. If you +would like to work on an issue, please follow these steps: -1. **Comment on the Issue**: Leave a comment on the issue expressing your intention to work on it. For example, "I would like to work on this issue." -2. **Wait for Confirmation**: A project maintainer will confirm your assignment by officially assigning the issue to you or by acknowledging your comment. -3. **Start Working**: Once you have received confirmation, you can start working on the issue. -4. **Open a Pull Request**: When your work is ready, open a pull request (PR) with your solution. Make sure to mention in the PR that you are working on the issue by referencing the issue number in the PR description (e.g., "This PR addresses issue #123"). + 1. **Comment on the Issue**: Leave a comment on the issue expressing your + intention to work on it. For example, "I would like to work on this issue." -By following this process, we can avoid duplication of efforts and ensure clear communication among all contributors. + 2. **Wait for Confirmation**: A project maintainer will confirm your + assignment by officially assigning the issue to you or by acknowledging + your comment. + + 3. **Start Working**: Once you have received confirmation, you can start + working on the issue. + + 4. **Open a Pull Request**: When your work is ready, open a pull request (PR) + with your solution. Make sure to mention in the PR that you are working on + the issue by referencing the issue number in the PR description (e.g., + "This PR addresses issue #123"). + +By following this process, we can avoid duplication of efforts and ensure clear +communication among all contributors. ### Creating a New Issue @@ -53,35 +80,49 @@ If no related issue exists, you can create a new one. Here are some tips: -- Provide detailed context to make it clear for others. -- Include steps to reproduce the issue or the rationale for a new feature. -- Attach screenshots, videos, etc., if applicable. + - Provide detailed context to make it clear for others. + - Include steps to reproduce the issue or the rationale for a new feature. + - Attach screenshots, videos, etc., if applicable. ## Pull Requests ### Pull Request Workflow -We use the ["fork-and-pull"](https://github.com/susam/gitpr) Git workflow: +We use the ["fork-and-pull"][GitPR] Git workflow: + + 1. Fork the repository. + + 2. Clone the project. -1. Fork the repository. -2. Clone the project. -3. Create a new branch with a descriptive name. -4. Commit your changes to this new branch. -5. Push your changes to your fork. -6. Create a pull request from your fork to our repository. Use the "master" branch as the base branch. -7. Tag a maintainer to review your PR. + 3. Create a new branch with a descriptive name. + + 4. Commit your changes to this new branch. + + 5. Push your changes to your fork. + + 6. Create a pull request from your fork to our repository. Use the `master` + branch as the base branch. + + 7. Tag a maintainer to review your PR. ### Tips for a Quality Pull Request -- Title your PR to clearly describe the work done. -- Structure the description for easy reading, using bullet points and screenshots if necessary. -- Link to the related issue, if applicable. -- Write a concise commit message summarizing the work. + - Title your PR to clearly describe the work done. + + - Structure the description for easy reading, using bullet points and + screenshots if necessary. + + - Link to the related issue, if applicable. + + - Write a concise commit message summarizing the work. ### After Submitting Your PR -- We might ask questions, request more details, or ask for changes before merging your PR. This ensures clarity and smooth interaction. -- As you update your PR, resolve each conversation. -- Once approved, we will "squash-and-merge" to keep the commit history clean. + - We might ask questions, request more details, or ask for changes before + merging your PR. This ensures clarity and smooth interaction. + + - As you update your PR, resolve each conversation. + + - Once approved, we will "squash-and-merge" to keep the commit history clean. Thank you for your contributions! diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 9904dfe15..3c3f7ebcb 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -1,11 +1,22 @@ - # Contributors to Calimero +[Apache license]: https://www.apache.org/licenses/LICENSE-2.0 +[DCO]: https://developercertificate.org/ + We contributors to Calimero: -* License all our contributions to the project under the Apache License, Version 2.0 -* Have the legal rights to license our contributions ourselves, or get permission to license them from our employers, clients, or others who may have them -* Signoff on our commits with the [Developer Certificate of Origin (DCO) Version 1.1](https://developercertificate.org/) -* Previously we added our names and GitHub handles to this CONTRIBUTORS.md file. We leave these names here to record the commits that came before. + * License all our contributions to the project under the [Apache License, + Version 2.0][Apache license]. + + * Have the legal rights to license our contributions ourselves, or get + permission to license them from our employers, clients, or others who may + have them. + + * Sign off on our commits with the [Developer Certificate of Origin (DCO) + Version 1.1][DCO]. + + * Previously we added our names and GitHub handles to this + `CONTRIBUTORS.md` file. We leave these names here to record the commits that + came before. ----------- diff --git a/Cargo.toml b/Cargo.toml index 2120d82dd..56526d910 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,6 +3,7 @@ authors = ["Calimero Limited "] edition = "2021" repository = "https://github.com/calimero-network/core" license = "MIT OR Apache-2.0" +license-file = "LICENSE.md" [workspace] resolver = "2" diff --git a/README.mdx b/README.mdx index 2822dc99f..3321277c9 100644 --- a/README.mdx +++ b/README.mdx @@ -13,40 +13,97 @@ -Calimero Network is designed as an innovative framework for building decentralized application protocols and facilitating private data sharing, addressing the critical need for privacy and data ownership in the digital age. It empowers developers with tools like the Protocol SDK for defining application-specific communication rules and the Client SDK for seamless interaction with the network, alongside a specialized compute market for executing demanding tasks. The network's architecture supports peer-to-peer encrypted communication, ensuring data privacy and security through end-to-end encryption methods, such as the Double Ratchet Algorithm. Calimero stands out by offering localized consensus, which contrasts with traditional global consensus models, allowing for scalable and efficient application performance without sacrificing user privacy. Intended for developers seeking to create privacy-preserving applications and users desiring control over their data, Calimero Network promises a decentralized computing environment where privacy is paramount, and data remains under the user's control. +Calimero Network is designed as an innovative framework for building +decentralized application protocols and facilitating private data sharing, +addressing the critical need for privacy and data ownership in the digital age. + +It empowers developers with tools like the Protocol SDK for defining +application-specific communication rules and the Client SDK for seamless +interaction with the network, alongside a specialized compute market for +executing demanding tasks. The network's architecture supports peer-to-peer +encrypted communication, ensuring data privacy and security through end-to-end +encryption methods, such as the Double Ratchet Algorithm. + +Calimero stands out by offering localized consensus, which contrasts with +traditional global consensus models, allowing for scalable and efficient +application performance without sacrificing user privacy. Intended for +developers seeking to create privacy-preserving applications and users desiring +control over their data, Calimero Network promises a decentralized computing +environment where privacy is paramount, and data remains under the user's +control. ## Why Calimero? -The name Calimero Network symbolizes a pioneering spirit and a commitment to addressing the nuanced challenges within the decentralized digital landscape. Inspired by the concept of breaking new ground and offering innovative solutions, Calimero Network was conceived to redefine the paradigms of privacy, security, and user autonomy in the decentralized space. +The name Calimero Network symbolizes a pioneering spirit and a commitment to +addressing the nuanced challenges within the decentralized digital landscape. +Inspired by the concept of breaking new ground and offering innovative +solutions, Calimero Network was conceived to redefine the paradigms of privacy, +security, and user autonomy in the decentralized space. -At its core, Calimero Network is about empowerment and transformation, providing robust tools and a secure framework for developers and users alike. It champions the principles of user privacy and data sovereignty, addressing the pressing need for a platform that prioritizes these elements without compromising on efficiency and scalability. +At its core, Calimero Network is about empowerment and transformation, providing +robust tools and a secure framework for developers and users alike. It champions +the principles of user privacy and data sovereignty, addressing the pressing +need for a platform that prioritizes these elements without compromising on +efficiency and scalability. -The ethos of Calimero Network is rooted in the idea of creating a significant impact and driving change within the decentralized ecosystem, much like a catalyst that sparks a broader movement towards a more secure, private, and user-centric digital world. It stands as a testament to the power of innovation and the relentless pursuit of a more equitable and decentralized internet. +The ethos of Calimero Network is rooted in the idea of creating a significant +impact and driving change within the decentralized ecosystem, much like a +catalyst that sparks a broader movement towards a more secure, private, and +user-centric digital world. It stands as a testament to the power of innovation +and the relentless pursuit of a more equitable and decentralized internet. ## Backstory -In the early days of decentralized technology, a visionary team observed the challenges and limitations of existing blockchain infrastructures, particularly around privacy, data sovereignty, and scalability. Inspired by the core principles of Web3, they embarked on a mission to reimagine how decentralized applications could operate, with a strong emphasis on user privacy and data control. This led to the birth of Calimero Network, a groundbreaking ecosystem designed from the ground up to address these challenges. The team's commitment to innovation resulted in the creation of unique components like the Protocol SDK, specialized nodes, and an integrated approach to managing decentralized identities (DIDs) within client nodes, ensuring user anonymity and security. Calimero Network's story is one of relentless pursuit of a more private, efficient, and user-centric decentralized web, setting a new standard for what decentralized platforms can achieve. +In the early days of decentralized technology, a visionary team observed the +challenges and limitations of existing blockchain infrastructures, particularly +around privacy, data sovereignty, and scalability. Inspired by the core +principles of Web3, they embarked on a mission to reimagine how decentralized +applications could operate, with a strong emphasis on user privacy and data +control. This led to the birth of Calimero Network, a groundbreaking ecosystem +designed from the ground up to address these challenges. + +The team's commitment to innovation resulted in the creation of unique +components like the Protocol SDK, specialized nodes, and an integrated approach +to managing decentralized identities (DIDs) within client nodes, ensuring user +anonymity and security. + +Calimero Network's story is one of relentless pursuit of a more private, +efficient, and user-centric decentralized web, setting a new standard for what +decentralized platforms can achieve. ## Contributing -Calimero is Open Source under the [Apache License 2.0](LICENSE), and is the [copyright of its contributors](NOTICE). If you would like to contribute to the software, you must: +Calimero is Open Source under the [Apache License 2.0](LICENSE), and is the +[copyright of its contributors](NOTICE). If you would like to contribute to the +software, you must: -1. Read the [Developer Certificate](https://developercertificate.org/) of Origin Version 1.1 -2. Signing all commits to the Calimero project. + 1. Read the [Developer Certificate of Origin Version 1.1](https://developercertificate.org/) + 2. Sign all commits to the Calimero project -This ensures that users, distributors, and other contributors can rely on all the software related to Calimero being contributed under the terms of the [License](LICENSE). No contributions will be accepted without following this process. +This ensures that users, distributors, and other contributors can rely on all +the software related to Calimero being contributed under the terms of the +[License](LICENSE). No contributions will be accepted without following this +process. -Afterwards, navigate to the [contributing guide](CONTRIBUTING.md) to get started. +Afterwards, navigate to the [contributing guide](CONTRIBUTING.md) to get +started. ## License -This repository contains Calimero, covered under the [Apache License 2.0](LICENSE), except where noted (any Calimero logos or trademarks are not covered under the Apache License, and should be explicitly noted by a LICENSE file.) +This repository contains Calimero, covered under the [Apache License +2.0](LICENSE), except where noted (any Calimero logos or trademarks are not +covered under the Apache License, and should be explicitly noted by a LICENSE +file.) -Calimero is a product produced from this open source software, exclusively by Calimero, Ltd. It is distributed under our commercial terms. +Calimero is a product produced from this open source software, exclusively by +Calimero, Ltd. It is distributed under our commercial terms. -Others are allowed to make their own distribution of the software, but they cannot use any of the Calimero trademarks, cloud services, etc. +Others are allowed to make their own distribution of the software, but they +cannot use any of the Calimero trademarks, cloud services, etc. -We explicitly grant permission for you to make a build that includes our trademarks while developing Calimero itself. You may not publish or share the build, and you may not use that build to run Calimero for any other purpose. +We explicitly grant permission for you to make a build that includes our +trademarks while developing Calimero itself. You may not publish or share the +build, and you may not use that build to run Calimero for any other purpose. ## Questions diff --git a/crates/identity/README.md b/crates/identity/README.md index 6ce399f4a..7d37ba922 100644 --- a/crates/identity/README.md +++ b/crates/identity/README.md @@ -1,6 +1,9 @@ # Calimero Identity -Decentralized identity, also referred to as self-sovereign identity, is an open-standards based identity framework that uses digital identifiers and verifiable credentials that are self-owned, independent, and enable trusted data exchange. +Decentralized identity, also referred to as self-sovereign identity, is an +open-standards based identity framework that uses digital identifiers and +verifiable credentials that are self-owned, independent, and enable trusted data +exchange. ## This library provides basic functionalities for using decentralized identity diff --git a/crates/sdk/design-guide.md b/crates/sdk/design-guide.md index abd538fa4..08d119133 100644 --- a/crates/sdk/design-guide.md +++ b/crates/sdk/design-guide.md @@ -1,4 +1,4 @@ # Accountability rules -- Zero-cost abstractions! + - Zero-cost abstractions! - Do not pull in format code if the user doesn't use it diff --git a/crates/sdk/macros/design-guide.md b/crates/sdk/macros/design-guide.md index dd38f531e..a01bce4cb 100644 --- a/crates/sdk/macros/design-guide.md +++ b/crates/sdk/macros/design-guide.md @@ -1,30 +1,45 @@ # Accountability rules -- Do not hoard tokens from any other parser including rustc - - Meaning, even in the case of errors, return all the tokens you received, and only highlight the ones that are problematic -- Collect all possible errors and report them in a single pass -- Account for as many patterns in argument positions as possible -- Sanitize `Self` early, to build our IR -- Support references, and encourage them to avoid copying -- No magic. Everything should be explicit. - - Any behavior that affects the generated code should be part of the API - - For example: `#[app::destroy]` as a macro doesn't do anything by itself - - but informs the code generator to permit state destruction -- Support `#[app::*(crate = "foo")]` to allow referencing a custom `sdk` crate -- Sanitizize attr arguments, account for all possible values. + - Do not hoard tokens from any other parser, including `rustc` + + - Meaning, even in the case of errors, return all the tokens you received, + and only highlight the ones that are problematic + + - Collect all possible errors and report them in a single pass + + - Account for as many patterns in argument positions as possible + + - Sanitize `Self` early, to build our IR + + - Support references, and encourage them to avoid copying + + - No magic. Everything should be explicit. + + - Any behavior that affects the generated code should be part of the API. + For example: `#[app::destroy]` as a macro doesn't do anything by itself, + but informs the code generator to permit state destruction + + - Support `#[app::*(crate = "foo")]` to allow referencing a custom `sdk` crate + + - Sanitize attr arguments, account for all possible values ## Thoughts -- Do we really need to allocate in the codegen? + - Do we really need to allocate in the codegen? + + - Consider using traits to define app behavior to keep code generation simple + + - Should we support consumption of `self` as a pattern for eventual state + destruction? + + - It's more idiomatic, but could be a footgun -- Consider using traits to define app behavior to keep code generation simple + - So maybe add an error, telling the user to either use `&self` or add the + `#[app::destroy]` attribute -- Should we support consumption of `self` as a pattern for eventual state destruction? - - It's more idiomatic, but could be a footgun - - So maybe add an error, telling the user to either use `&self` or add the `#[app::destroy]` attribute + - How do we work out migration? -- How do we work out migration? - - Can be tied into how we how we handle state reconciliation + - Can be tied into how we handle state reconciliation ## Test Cases