diff options
author | Colin Okay <okay@toyful.space> | 2022-02-08 08:24:27 -0600 |
---|---|---|
committer | Colin Okay <okay@toyful.space> | 2022-02-08 08:24:27 -0600 |
commit | f37b6e61cbebab71424ae9561cd5932776c952d9 (patch) | |
tree | bae7064f68458133d8a35a9480eaa0f303095c6b /lazybones-documentation.lisp | |
parent | 4a10c2df8ba3097af9bf34f19c12186d63ca831a (diff) |
added support for basic documentation of apps
Diffstat (limited to 'lazybones-documentation.lisp')
-rw-r--r-- | lazybones-documentation.lisp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/lazybones-documentation.lisp b/lazybones-documentation.lisp new file mode 100644 index 0000000..bb94515 --- /dev/null +++ b/lazybones-documentation.lisp @@ -0,0 +1,43 @@ +;;;; lazybones-documentation.lisp -- documenting APP instances + +(in-package :lazybones) + +(defun sorted-endpoints (endpoints) + (sort (copy-seq endpoints) #'string< :key #'endpoint-route)) + +(defun generate-app-documentation (app) + "For now, generates a single Markdown string that documents each endpoint in APP." + (symbol-macrolet ((newline (progn (princ #\newline)(princ #\newline)))) + (with-slots + (title + version + endpoints + (default-authorizer authorizer) + default-content-type + app-error-response-contents + description) + app + (with-output-to-string (*standard-output*) + (princ "# ") (princ title) (princ " - ") (princ "v") (princ version) + newline + (princ description) + newline + (princ "## Endpoints") + (dolist (ep (sorted-endpoints endpoints)) + (with-slots (method route authorizer endpoint-documentation) ep + newline + (princ "### ") (princ method) (princ " ") (princ route) + newline + (when authorizer + (princ "Authorization Required: ") + (cond ((function-or-function-name-p authorizer) + (princ (documentation authorizer 'function))) + ((function-or-function-name-p default-authorizer) + (princ (documentation default-authorizer 'function)))) + newline) + + (princ endpoint-documentation) )))))) + +(defun function-or-function-name-p (thing) + (or (functionp thing) + (and (symbolp thing) (fboundp thing)))) |