Skip to content

Instantly share code, notes, and snippets.

@rossabaker
Last active July 11, 2020 15:54
Show Gist options
  • Save rossabaker/138cac981018f7ec2c85e36d5a63bb89 to your computer and use it in GitHub Desktop.
Save rossabaker/138cac981018f7ec2c85e36d5a63bb89 to your computer and use it in GitHub Desktop.
Moomin middleware for Scala
/*
* Copyright 2013-2020 http4s.org
*
* SPDX-License-Identifier: Apache-2.0
*/
package org.http4s.server.middleware
import org.http4s._
import cats.Functor
import cats.data.Kleisli
/** Renders a Moomin in the header of every response.
*
* @see https://twitter.com/thingskatedid/status/1280745824951996416
* @see https://www.asciiart.eu/books/moomintroll
**/
object Moomin {
def apply[F[_]: Functor, A, G[_]](
http: Kleisli[F, A, Response[G]]): Kleisli[F, A, Response[G]] =
http.map(_.putHeaders(headers: _*))
val headers = List(
" @@@",
" .@:: @@",
" $ @$@:. .. @@@",
" ..:/ /$. | $0$$@@",
" . $. /@ .. . . . .$/ @@@@@",
" |@. /@ :||| :@ $$@@@ ",
" |:@@@@@@@@@@@@@@@@ .@ $$@@@ ",
" : @@@@@@@@@@@@@@@@@@$@@ $$#@ ",
" .| @@@@@@@@@@@@@@@@@@@@@@@@@$ ",
" :@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
" | $@$::$@@@@@@@@@@@@@@@@@@@@@@@@@",
" . @0 @@@ @@@@@@@ :@@@@@@@@@@@@@@",
" :/@ @@@@@@@@@@@@@@@ |@@@@@@@@@@@@@ ",
" / $@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
" ||@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
" ..@$ $ @@@@@@| |$@@@@@@@@@@@@@@@@",
" .@0 @ @@@@ $ |@@@@@@@@@@@@@@@ ",
" :0@ @@ @@@ @ @@@@@@@@@@@@@@@",
" .:@@@ @@@@@ @@@ @@@ @@@@@@@@@@@@@@@ ",
" :.|@@@@@ . @@@@ @@@@@@ @@@@@@@@@@@@@@@@",
" |..$@@@@@@@@@@@@@@@@@@ //: @@@@@@@@@@@@@@@@@ ",
" : /@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
" .0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ",
" .|0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
" /@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
" .$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
" $@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
". @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@::#@@@@@@",
" .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@. @@@@@@@ ",
" :@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$ $$@@@@@@@ ",
". @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@# @@@@@@@@@@@",
" |.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ .@@@@@@@@@@@@@ ",
" :0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ .@@@@@@@@@@@@@@@",
" @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$ .@@@@@@@@@@@@@@@@@@ ",
" #@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$ /@@@@@@@@@@@@@@@@@@@",
" . 0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$ /@@@@@@@@@@@@@@@@@@@@@@",
" .: /$@@@@@@@@@@@@@@@@@@@@@@#/ /@@@@@@@@@@@@@@@@@@@@@@@@",
" . .:$@@@@@@@@@@@@@@@@@@@ /@@@@@@@@@@@@@@@@@@@@@@@@@@",
" .. ...:: 0$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
" . @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
" @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
" ..@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
" :.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$$@@@@@@@@@@@@@@@",
" :@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@0 .@@@@@@@@@@@@@@@",
" |/@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@: 00@@@@@@@@@@@@@@@@",
" ..@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/ :@@@@@@@@@@@@@@@@@@",
" 0$@| @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$ /@@@@@@@@@@@@@@@@@@@@",
" 0@@$@$ 0@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$ 0@@@@@@@@@@@@@@@@@@@@@@",
" . 0@@@. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@$ $@@@@@@@@@@@@@@@@@@@@@@@@",
" /0..@@@. @@@@@@@@@@@@@@@@@@@@@@@@@@@@0 $@@@@@@@@@@@@@@@. :@@@@@@@@",
" @0 @@ @@@@@@@@@@@@@@@@@@@@@@@@@@ .::@@@@@@@@@@@@@@. |@@@@@@@@@@",
" /:.@| |$@@@@@@@@@@@@@@@@@@@@@@@@0 $.0@@@@@@@@@@@@@/. :@@@@@@@@@@@@",
" . . 0@@@@@@@@@@@@@@@@@@@@@@@@ :. @: $@:@@@@@@@. $@@@@@@@@@@@@@",
" .:@@@@@@@@@@@@@@@@@@@@@@@@#0 .@. .@ :@0:@@@ @@@@@@@@@@@@@@@",
" .@@@@@@@@@@@@@@@@@@@@@@@@@@ $ $ /: @@@@@@@@@@@@@@@@@",
" .|@@@@@@@@@@@@@@@@@@@@@@@@@@@@/ : @@@@@@@@@@@@@@@@@@@@",
" $@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
" .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
" .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
" ..@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
" |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
" . $@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
" . |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
" @@@@@@@||@@@@@@@@@@@@| @@@@@@@@@@@@@@@@@@@@",
" .$@@@@@0. /@@#$@$ $@@@@@@@@@@@@@@@@0/@@@@",
" ..@@@@@@@@@@#. . $@@@@@@@@@@@@@@@@@: @@@@@",
" | @@@@@@@@@@@:. #@@@@@@@@@@@@@@@@:.| @@@@@@@",
" .::|$@@@@@@@@@@@@@:. #@@@@@@@@@@@@@@@ :.@@@@@@@@ @@@@ ",
" #@@@@@@@@@@@@@@$00: :.|@@@@@@@@@@@@@@/ .:@@@@@@@@@@@@@@ @@@@@@@@@",
" . :. .::.. .:: ..:.0@@@@@@@@@@@@@@@@@.. ..@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@",
" .@@@@@@@@@@@@@@@@@@@@ :|. .@@@@@@@@@@@@@@@@@@@@@@@@@",
" @@@@@@@@@@@@@@@@@@ @@@@@@@@@@@",
" @@@@@@@@",
).zipWithIndex.map { case (s, i) => Header(f"X-Moomin-$i%02d", s) }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment