initial commits
parent
28e3af3f2d
commit
83995b0379
|
@ -0,0 +1,11 @@
|
|||
package iid
|
||||
|
||||
import (
|
||||
"errors"
|
||||
)
|
||||
|
||||
var (
|
||||
errBadRequest = errors.New("iid: bad request")
|
||||
errNilReceiver = errors.New("iid: nil receiver")
|
||||
errNothing = errors.New("iid: nothing")
|
||||
)
|
|
@ -0,0 +1,86 @@
|
|||
package iid
|
||||
|
||||
// IID represents an interaction‐identifier — i.e., an interaction‐ID — i.e., an IID.
|
||||
//
|
||||
// It is a scheme used to generate quazi‐monotonically‐increasing‐unique.
|
||||
type IID struct {
|
||||
value uint64
|
||||
loaded bool
|
||||
}
|
||||
|
||||
func Nothing() IID {
|
||||
return IID{}
|
||||
}
|
||||
|
||||
func something(value uint64) IID {
|
||||
return IID{
|
||||
value:value,
|
||||
loaded:true,
|
||||
}
|
||||
}
|
||||
|
||||
// Generate creates a new interaction‐identifier — i.e., an interaction‐ID — i.e., an IID.
|
||||
func Generate() IID {
|
||||
|
||||
var value uint64 = generate()
|
||||
|
||||
return something(value)
|
||||
}
|
||||
|
||||
// Chaos returns the randomness that is embeddd in the interaction‐identifier — i.e., an interaction‐ID — i.e., an IID.
|
||||
func (receiver IID) Chaos() (uint64, bool) {
|
||||
if Nothing() == receiver {
|
||||
return 0, false
|
||||
}
|
||||
|
||||
_, value := decompile(receiver.value)
|
||||
|
||||
return value, true
|
||||
}
|
||||
|
||||
func (receiver IID) String() string {
|
||||
if Nothing() == receiver {
|
||||
return ""
|
||||
}
|
||||
|
||||
var serialized string = serialize(receiver.value)
|
||||
|
||||
return serialized
|
||||
}
|
||||
|
||||
func (receiver IID) MarshalText() (text []byte, err error) {
|
||||
if Nothing() == receiver {
|
||||
return nil, errNothing
|
||||
}
|
||||
|
||||
var serialized string = serialize(receiver.value)
|
||||
|
||||
return []byte(serialized), nil
|
||||
}
|
||||
|
||||
// UnixTime returns the unix‐time that is embeddd in the interaction‐identifier — i.e., an interaction‐ID — i.e., an IID.
|
||||
func (receiver IID) UnixTime() (int64, bool) {
|
||||
if Nothing() == receiver {
|
||||
return 0, false
|
||||
}
|
||||
|
||||
value, _ := decompile(receiver.value)
|
||||
|
||||
return int64(value), true
|
||||
}
|
||||
|
||||
func (receiver *IID) UnmarshalText(p []byte) error {
|
||||
if nil == receiver {
|
||||
return errNilReceiver
|
||||
}
|
||||
|
||||
var serialized string = string(p)
|
||||
|
||||
value, successful := unserialize(serialized)
|
||||
if !successful {
|
||||
return errBadRequest
|
||||
}
|
||||
|
||||
*receiver = something(value)
|
||||
return nil
|
||||
}
|
Loading…
Reference in New Issue