Skip to content

Instructions #3

@Kaliumhexacyanoferrat

Description

@Kaliumhexacyanoferrat

Create a fully functional language port of GenHTTP, using the following acceptance criteria:

  1. Important: The port should use the state of the art technology features of language, but be a 1:1 version of GenHTTP functional wise. Do NOT skip concepts, simplify or change them. Keep the original naming of the functional concepts and structures. Technical names (e.g. some "delegate") can be renamed to match the target technology in language. Use the latest technology and dependencies available for language.
  2. Important: Take your time, closely follow the functional structures of GenHTTP and re-implement them thoughtfully in the target language.
  3. Only implement the internal engine for now, ignore Kestrel, but keep the flexibility to change the underlying engine in the future.
  4. The API should work on a low level structure that actually represents the memory of the request buffer (as we do with ReadOnlyMemory in C#). Implement the concept of "MemoryView" as a fundamental type. You do not need to add code generation for that, but the types must exist (PathSegment, ByteString, RequestMethod etc).
  5. Ensure all features of the API (routing, body reading). Important: Keep the principle that data is only allocated if really needed. Keep the principle of retaining and releasing the header when accessing the body.
  6. Create a port of Glyph11 that exposes the memory of the request with the type you decided on.
  7. The port must use the very same project structure as GenHTTP (so for example a project for API, for the internal engine, for each module etc). Within the modules, the structure must also be the same (public API on root, implementation in sub packages).
  8. Use the website in "../GenHTTP.Website" to fully understand the concepts of GenHTTP and their reasoning. As this is the documentation of GenHTTP 10 whereas you are using version 11 sources, keep the spirit of the concepts, not the code fragments provided by the website.
  9. Start with the following modules: IO, Layouting.
  10. Add the acceptenace tests for those modules. The acceptance test infrastructure must be setup the very same way as in C# (Test Host that accepts a handler etc). Just change the technology, not the logic. You must copy the acceptance tests 1:1. You might add some, but the original ones must exist.
  11. Add the concepts for the webservice layers next (so functional, webservices, controllers - with base modules reflection and conversion). Ignore the code generation path.
  12. Implement and verify all core concepts of the webservice features (such as registries, formatters, interceptors, injectors etc.)
  13. Implement all service acceptance tests to verify that logic such as "(int a, int b) => a + b" works as a web service method

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions