Slide 7
Slide 7 text
There’s no trade off between type safety & clarity
resources {
journalCss methods {
GET { _, journalId ->
journalId.toPCode().asResultOr { JournalNotFound(journalId) }
.flatMap { pCode -> storage.style(pCode) }
.map { Response(OK).body(it.toCSS()).contentType(CSS_UTF_8).cacheable().allowedFromAnyOrigin() }
.orElse { reportError(it, monitor) }
}
}
journalLogo methods {
GET { _, (journalId, format) ->
journalId.toPCode().asResultOr { JournalNotFound(journalId) }
.flatMap { pCode -> storage.logo(pCode, format) }
.map { logoUri -> Response(FOUND).location(logoUri).cacheable() }
.orElse { reportError(it, monitor) }
}
}
partnerLogo methods {
GET { _, partnerCode ->
storage.partnerLogo(partnerCode)
.onEachFailure { monitor.notify(MissingBrandingEvent(it)) }
.flatMapFailure { storage.defaultPartnerLogo() }
.map { logoBytes -> Response(OK).body(logoBytes).contentType(PNG).cacheable() }
.orElse { reportError(it, monitor) }
}
}
}
http4k.org, github.com/npryce/krouton, github.com/npryce/result4k