An experimental IndieWeb site built in Go.
at main 1.3 kB view raw
1package models 2 3import ( 4 "database/sql/driver" 5 6 "codeberg.org/gruf/go-ulid" 7 "gorm.io/gorm" 8 "gorm.io/gorm/schema" 9) 10 11type ULID ulid.ULID 12 13func NewULID() ULID { 14 return ULID(ulid.MustNew()) 15} 16 17func (ULID) GormDataType() string { 18 return "string" 19} 20 21func (ULID) GormDBDataType(db *gorm.DB, field *schema.Field) string { 22 switch db.Dialector.Name() { 23 case "mysql": 24 return "LONGTEXT" 25 case "postgres": 26 return "UUID" 27 case "sqlserver": 28 return "NVARCHAR" 29 case "sqlite": 30 return "TEXT" 31 default: 32 return "" 33 } 34} 35 36func (u *ULID) Scan(value interface{}) error { 37 var result ulid.ULID 38 if err := result.Scan(value); err != nil { 39 return err 40 } 41 *u = ULID(result) 42 return nil 43} 44 45func (u ULID) Value() (driver.Value, error) { 46 return ulid.ULID(u).String(), nil 47} 48 49func (u ULID) String() string { 50 return ulid.ULID(u).String() 51} 52 53func (u ULID) Equals(other ULID) bool { 54 return u.String() == other.String() 55} 56 57func (u ULID) Length() int { 58 return len(u.String()) 59} 60 61func (u ULID) IsNil() bool { 62 zero, err := ulid.ParseString("0000000000000000") 63 if err != nil { 64 panic(err) 65 } 66 67 return ulid.ULID(u) == zero 68} 69 70func (u ULID) IsEmpty() bool { 71 return u.IsNil() || u.Length() == 0 72} 73 74func (u *ULID) IsNilPtr() bool { 75 return u == nil 76} 77 78func (u *ULID) IsEmptyPtr() bool { 79 return u.IsNilPtr() || u.IsEmpty() 80}