Skip to content

Instantly share code, notes, and snippets.

View ShahOdin's full-sized avatar
🎋

Shah Saraei ShahOdin

🎋
View GitHub Profile
package activation.service.instances.amazon
import cats.effect.{IO, IOApp, Resource, Sync}
import com.nimbusds.jose.util.X509CertUtils
import cats.syntax.all.*
import org.bouncycastle.asn1.pkcs.PrivateKeyInfo
import org.bouncycastle.jce.provider.BouncyCastleProvider
import org.bouncycastle.openssl.{PEMParser, PEMKeyPair}
import java.security.Signature
@ShahOdin
ShahOdin / MaxCounters.scala
Last active July 3, 2022 01:10
codility solution
import scala.collection.immutable.HashMap
object Demo extends App {
sealed trait Input
object Input{
final case class IncrementCounter(humanIndex: Int) extends Input
case object MaxCounter extends Input
def fromInt(n: Int, arraySize: Int): Input = if (n <= arraySize){
{
"info": {
"_postman_id": "3673316a-9a35-4b0d-a148-3566b490798d",
"name": "Hello World",
"description": "A simple collection with one request that has tests to validate response. You can use this collection as a entry-levle example to demonstrate Postman's debugging capabilities.",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "Hello World",
@ShahOdin
ShahOdin / deepMergeAndConcatArrays.scala
Created June 16, 2021 20:32
deep merge but respect arrays
private def extractNestedArray(
json: Json
): Option[(NonEmptyList[String], Vector[Json])] = {
def extractNestedArrayInternal(
acum: List[String],
json: Json
): Option[(NonEmptyList[String], Vector[Json])] =
json.arrayOrObject(
or = None,
@ShahOdin
ShahOdin / flatten&unFlatten.scala
Last active June 16, 2021 20:25
flatten and unflatten json using circe
import cats.data.NonEmptyList
import io.circe.{ACursor, Json, JsonObject}
import cats.instances.option._
object Foo {
def flattenJson(input: Json): Json = {
var result: Json = Json.obj()
object Foo extends App {
import cats.data.Kleisli
import cats.Functor
import cats.effect.IO
import cats.syntax.functor._
import cats.syntax.flatMap._
type TraceyId = String
type Tracey[F[_], A] = Kleisli[F, TraceyId, A]
type TraceyIO[A] = Tracey[IO, A]
@ShahOdin
ShahOdin / refDemo.scala
Created December 21, 2020 13:12
demonstration of using Cats Effect's Ref for sharing state
import cats.{Applicative, Functor}
import cats.effect.concurrent.Ref
import cats.effect.{Concurrent, ExitCode, IO, IOApp, Timer}
import fs2.Stream
import cats.syntax.functor._
import cats.syntax.applicative._
import scala.concurrent.duration.DurationInt
object DemoApp extends IOApp {
@ShahOdin
ShahOdin / FilesDiff.scala
Last active September 17, 2020 12:57
simple utility tool that reads two files and outputs their difference
import java.io.PrintWriter
import cats.effect.{ExitCode, IO, IOApp, Resource, Sync}
import cats.syntax.traverse._
import cats.syntax.functor._
import scala.io.Source
object IdDiff extends IOApp {
@ShahOdin
ShahOdin / snail.scala
Last active August 30, 2020 17:40
snail kata
import cats.data.NonEmptyList
object Snail {
case class Coordinate(i: Int, j: Int)
case class Navigation(visitedSofar: NonEmptyList[Coordinate])
sealed trait Direction
object Direction {
case object Up extends Direction
@ShahOdin
ShahOdin / di-demo.scala
Last active April 14, 2020 13:26
A demo of dependencies injection
case class Config(barConfig: Config.BarConfig, fooConfig: Config.FooConfig)
object Config {
trait BarConfig
trait FooConfig
}
/* Client layer */
import cats.data.ReaderT
import Config._