... This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
... If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.

(.using
 [library
  [lux (.except)
   ["$" documentation]
   [data
    ["[0]" text (.only)
     ["%" \\injection]]
    [collection
     ["[0]" list (.use "[1]:[0]" monoid)]]]
   [meta
    [macro
     ["[0]" template]]]]]
 [\\library
  ["[0]" /]])

(the description
  (template.macro (_ <name>)
    [($.definition <name>
       (|> (template.text [<name>])
           (text.replaced "_" " ")
           text.upper_cased
           (text (%.natural <name>) ": ")))]))

(`` (the all_100-300
      (List $.Documentation)
      (list (,, (template.with [<name>]
                  [(description <name>)]

                  [... 1xx Informational response
                   [/.continue]
                   [/.switching_protocols]
                   [/.processing]
                   [/.early_hints]

                   ... 2xx Success
                   [/.ok]
                   [/.created]
                   [/.accepted]
                   [/.non_authoritative_information]
                   [/.no_content]
                   [/.reset_content]
                   [/.partial_content]
                   [/.multi_status]
                   [/.already_reported]
                   [/.im_used]

                   ... 3xx Redirection
                   [/.multiple_choices]
                   [/.moved_permanently]
                   [/.found]
                   [/.see_other]
                   [/.not_modified]
                   [/.use_proxy]
                   [/.switch_proxy]
                   [/.temporary_redirect]
                   [/.permanent_redirect]]
                  ))
            )))

(`` (the all_400-500
      (List $.Documentation)
      (list (,, (template.with [<name>]
                  [(description <name>)]

                  [... 4xx Client errors
                   [/.bad_request]
                   [/.unauthorized]
                   [/.payment_required]
                   [/.forbidden]
                   [/.not_found]
                   [/.method_not_allowed]
                   [/.not_acceptable]
                   [/.proxy_authentication_required]
                   [/.request_timeout]
                   [/.conflict]
                   [/.gone]
                   [/.length_required]
                   [/.precondition_failed]
                   [/.payload_too_large]
                   [/.uri_too_long]
                   [/.unsupported_media_type]
                   [/.range_not_satisfiable]
                   [/.expectation_failed]
                   [/.im_a_teapot]
                   [/.misdirected_request]
                   [/.unprocessable_entity]
                   [/.locked]
                   [/.failed_dependency]
                   [/.upgrade_required]
                   [/.precondition_required]
                   [/.too_many_requests]
                   [/.request_header_fields_too_large]
                   [/.unavailable_for_legal_reasons]

                   ... 5xx Server errors
                   [/.internal_server_error]
                   [/.not_implemented]
                   [/.bad_gateway]
                   [/.service_unavailable]
                   [/.gateway_timeout]
                   [/.http_version_not_supported]
                   [/.variant_also_negotiates]
                   [/.insufficient_storage]
                   [/.loop_detected]
                   [/.not_extended]
                   [/.network_authentication_required]]
                  ))
            )))

(the .public documentation
  (List $.Documentation)
  (list.partial ($.module /._
                          "")

                (all list:composite
                     all_100-300
                     all_400-500
                     )
                ))
