nip19 parsing.

This commit is contained in:
fiatjaf
2023-03-24 20:46:59 -03:00
parent b966c8a1ac
commit d54b776c38
3 changed files with 132 additions and 40 deletions

View File

@@ -0,0 +1,33 @@
import io.circe.parser.*
import cats.syntax.all.*
import scoin.*
import snow.*
import Components.*
object Parser {
def parseInput(input: String): Either[
String,
Event | PrivateKey | AddressPointer | EventPointer | ProfilePointer
] =
NIP19.decode(input) match {
case Right(pp: ProfilePointer) => Right(pp)
case Right(evp: EventPointer) => Right(evp)
case Right(sk: PrivateKey) => Right(sk)
case Right(addr: AddressPointer) => Right(addr)
case Left(_) =>
parse(input) match {
case Left(err: io.circe.ParsingFailure) =>
Left("not valid JSON or NIP-19 code")
case Right(json) =>
json
.as[Event]
.leftMap { err =>
err.pathToRootString match {
case None => s"decoding ${err.pathToRootString}"
case Some(path) => s"field $path is missing or wrong"
}
}
}
}
}