Commit add Opt/T fromBytes/fromHex methods similar to StringFactory (#2499)

This commit is contained in:
Chris Stewart 2021-01-09 13:04:07 -06:00 committed by GitHub
parent 27e50b2c34
commit 2c2646c78d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -2,6 +2,8 @@ package org.bitcoins.crypto
import scodec.bits.ByteVector import scodec.bits.ByteVector
import scala.util.Try
/** /**
* Created by chris on 2/26/16. * Created by chris on 2/26/16.
* Trait to implement ubiquitous factory functions across our codebase * Trait to implement ubiquitous factory functions across our codebase
@ -11,12 +13,40 @@ abstract class Factory[+T] {
/** Creates a T out of a hex string. */ /** Creates a T out of a hex string. */
def fromHex(hex: String): T = fromBytes(CryptoBytesUtil.decodeHex(hex)) def fromHex(hex: String): T = fromBytes(CryptoBytesUtil.decodeHex(hex))
/** Deserializes the given hex string to a T
* If the hex is not correct, [[None]] is returned
*/
def fromHexOpt(hex: String): Option[T] = {
fromHexT(hex).toOption
}
/** Deserializes the given hex string
* if the hex is not correct, we give you a [[Failure]]
*/
def fromHexT(hex: String): Try[T] = {
Try(fromHex(hex))
}
/** Creates a T out of a hex string in little endian. */ /** Creates a T out of a hex string in little endian. */
def fromHexLE(hex: String): T = fromBytesLE(CryptoBytesUtil.decodeHex(hex)) def fromHexLE(hex: String): T = fromBytesLE(CryptoBytesUtil.decodeHex(hex))
/** Creates a T out of a sequence of bytes. */ /** Creates a T out of a sequence of bytes. */
def fromBytes(bytes: ByteVector): T def fromBytes(bytes: ByteVector): T
/** Deserializes the given [[ByteVector]] to a T
* If the [[ByteVector]] is not correct, [[None]] is returned
*/
def fromBytesOpt(bytes: ByteVector): Option[T] = {
fromBytesT(bytes).toOption
}
/** Deserializes the given [[ByteVector]] string
* if the [[ByteVector]] is not correct, we give you a [[Failure]]
*/
def fromBytesT(bytes: ByteVector): Try[T] = {
Try(fromBytes(bytes))
}
/** Creates a T out of a sequence of bytes in little endian. */ /** Creates a T out of a sequence of bytes in little endian. */
def fromBytesLE(bytes: ByteVector): T = fromBytes(bytes.reverse) def fromBytesLE(bytes: ByteVector): T = fromBytes(bytes.reverse)