use v6.e.PREVIEW; #| Post database unit module DB; use Pandoc; use JSON::Class:auth; #| Shared post meta-data role Post is json { #| The location of the source file for the post has IO::Path:D $.source is required; #| The time to display for the creation of the post has DateTime:D $.posted-at is required; #| An optional list of edit times for the post has DateTime:D @.edited-at is rw = []; #| Get the title for this post, intended to be extracted from whatever #| document produced it method title(--> Str:D) {...} } #| A plain markdown post class MarkdownPost does Post is json { #| Marker for disambiguation between post types in json representation, the #| cheaty way has Bool:D $.markdown = True; method title(--> Str:D) { markdown-title($!source) } } # #| A literate idris post in markdown format # class IdrisPost does Post { # method title(--> Str:D) { # markdown-title($!source) # } # } #| The top level posts database class PostDB is json(:pretty) { #| The inner list of posts has Post:D @.posts = []; }