Example on how to run locally an AWS Lambda via API Gateway using localstack.
Based on...
/* | |
* Self-Explanatory Protocol Buffer Lang Guide | |
*/ | |
/* | |
* Why Protocol Buffers? | |
* Protocol buffers are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data – think XML, but smaller, faster, and simpler. | |
* You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages. | |
* Protocol Buffers are Schema Of Messages. They are language agnostic. |
Example on how to run locally an AWS Lambda via API Gateway using localstack.
Based on...
This focuses on generating the certificates for loading local virtual hosts hosted on your computer, for development only.
Do not use self-signed certificates in production ! For online certificates, use Let's Encrypt instead (tutorial).
package com.akka.websocket | |
import akka.NotUsed | |
import akka.actor.typed.scaladsl.Behaviors | |
import akka.actor.typed.{ActorRef, ActorSystem, Behavior} | |
import akka.http.scaladsl.Http | |
import akka.http.scaladsl.model.StatusCodes | |
import akka.http.scaladsl.model.ws.{BinaryMessage, Message, TextMessage} | |
import akka.http.scaladsl.server.Directives._ | |
import akka.stream.scaladsl.{Flow, Keep, Sink, Source} |
import akka.NotUsed | |
import akka.actor.typed.scaladsl.Behaviors | |
import akka.actor.typed.{ActorRef, ActorSystem, Behavior} | |
import scala.concurrent.duration.DurationInt | |
object PingPongActorMain extends App { | |
case class Ping(counter: Int, replyTo: ActorRef[Pong]) |
object ExploreUnionTypes { | |
final case class Some[T](t: T) | |
final case class None() | |
type Option[T] = Some[T] | None | |
def toOption[T](t: T): Option[T] = { | |
if (t == null) None() else Some(t) | |
} | |
@main |
object ExploreIntersectionTypes { | |
trait Mapper[A, B] { | |
def map(l: List[A])(f: A => B): List[B] = l.map(f) | |
} | |
trait Reducer[A, B >: A] { | |
def reduce(l: List[A])(f: (B, B) => B): B = l.reduce(f) | |
} |
object ExploreDependentFunctionValue { | |
trait Entry { type Key; val key: Key } | |
def extractKey(e: Entry): e.Key = e.key // a dependent method | |
val extractor: (e: Entry) => e.Key = extractKey // a dependent function value | |
final case class IntEntry() extends Entry { | |
type Key = Int | |
override val key = 10 | |
} |