Back to godoc.org

Package types

v1.3.0
Latest Go to latest

The latest major version is v2.

Published: Feb 8, 2019 | License: Apache-2.0 | Module: github.com/graniticio/granitic

Overview

Package types provides versions of Go's built-in types that better support web-services.

Serialising data into and out of some of Go's native types can be problematic. This is because the zero value of numbers, bools and strings are not nil, but 0, false and "" respectively. This means the intent of the original data can be lost. Did the caller provider 'false' or just forget to specify a value?

A similar problem is solved with Go's sql.NullXXX types for handling null values in and out of databases, but those types are not suitable for use with web services.

Grantic defines a set of four 'nilable' types for handling int64, float64, bool and string values that might not always have a value associated with them. There is deep support for these types throughout Granitic including JSON and XML marhsalling/unmarshalling, path and query parameter binding, validation, query templating and RDBMS access. Developers are strongly encouraged to use nilable types instead of native types wherever possible.

This package also defines a number of simple implmentations of a 'set'. Caution should be used when using these types in your own application as they are not goroutine safe or intended to store large numbers of strings.

Index

type Nilable

type Nilable interface {

	// Convert the contained value to JSON or nil if no value is set.
	MarshalJSON() ([]byte, error)

	// Populate the type with the supplied JSON value or ignore if value is JSON null
	UnmarshalJSON(b []byte) error

	// Whether or not the value in this type was explicitly set
	IsSet() bool
}

Implemented by a type that acts as a wrapper round a native type to track whether a value has actually been set.

type NilableBool

type NilableBool struct {
	// contains filtered or unexported fields
}

A bool where it can be determined if false is an explicitly set value, or just the default zero value.

func NewNilableBool

func NewNilableBool(b bool) *NilableBool

Create a new NilableBool with the supplied value.

func (*NilableBool) Bool

func (nb *NilableBool) Bool() bool

The currently stored value (whether or not it has been explicitly set).

func (*NilableBool) IsSet

func (nb *NilableBool) IsSet() bool

See Nilable.IsSet

func (*NilableBool) MarshalJSON

func (nb *NilableBool) MarshalJSON() ([]byte, error)

See Nilable.MarshalJSON

func (*NilableBool) Set

func (nb *NilableBool) Set(v bool)

Set sets the contained value to the supplied value and makes IsSet true even if the supplied value is false.

func (*NilableBool) UnmarshalJSON

func (nb *NilableBool) UnmarshalJSON(b []byte) error

See Nilable.UnmarshalJSON

type NilableFloat64

type NilableFloat64 struct {
	// contains filtered or unexported fields
}

An float64 where it can be determined if 0 is an explicitly set value, or just the default zero value.

func NewNilableFloat64

func NewNilableFloat64(f float64) *NilableFloat64

Create a new NilableFloat64 with the supplied value.

func (*NilableFloat64) Float64

func (ni *NilableFloat64) Float64() float64

The currently stored value (whether or not it has been explicitly set).

func (*NilableFloat64) IsSet

func (nb *NilableFloat64) IsSet() bool

See Nilable.IsSet

func (*NilableFloat64) MarshalJSON

func (nf *NilableFloat64) MarshalJSON() ([]byte, error)

See Nilable.MarshalJSON

func (*NilableFloat64) Set

func (nf *NilableFloat64) Set(v float64)

Set sets the contained value to the supplied value and makes IsSet true even if the supplied value is 0.

func (*NilableFloat64) UnmarshalJSON

func (nf *NilableFloat64) UnmarshalJSON(b []byte) error

See Nilable.UnmarshalJSON

type NilableInt64

type NilableInt64 struct {
	// contains filtered or unexported fields
}

An int64 where it can be determined if 0 is an explicitly set value, or just the default zero value.

func NewNilableInt64

func NewNilableInt64(i int64) *NilableInt64

Create a new NilableInt64 with the supplied value.

func (*NilableInt64) Int64

func (ni *NilableInt64) Int64() int64

The currently stored value (whether or not it has been explicitly set).

func (*NilableInt64) IsSet

func (nb *NilableInt64) IsSet() bool

See Nilable.IsSet

func (*NilableInt64) MarshalJSON

func (ni *NilableInt64) MarshalJSON() ([]byte, error)

See Nilable.MarshalJSON

func (*NilableInt64) Set

func (ni *NilableInt64) Set(v int64)

Set sets the contained value to the supplied value and makes IsSet true even if the supplied value is 0.

func (*NilableInt64) UnmarshalJSON

func (ni *NilableInt64) UnmarshalJSON(b []byte) error

See Nilable.UnmarshalJSON

type NilableString

type NilableString struct {
	// contains filtered or unexported fields
}

A string where it can be determined if "" is an explicitly set value, or just the default zero value

func NewNilableString

func NewNilableString(v string) *NilableString

Create a new NilableString with the supplied value.

func (*NilableString) IsSet

func (ns *NilableString) IsSet() bool

See Nilable.IsSet

func (*NilableString) MarshalJSON

func (ns *NilableString) MarshalJSON() ([]byte, error)

See Nilable.MarshalJSON

func (*NilableString) Set

func (ns *NilableString) Set(v string)

Set sets the contained value to the supplied value and makes IsSet true even if the supplied value is the empty string.

func (*NilableString) String

func (ns *NilableString) String() string

The currently stored value (whether or not it has been explicitly set).

func (*NilableString) UnmarshalJSON

func (ns *NilableString) UnmarshalJSON(b []byte) error

See Nilable.UnmarshalJSON

type OrderedStringSet

type OrderedStringSet struct {
	// contains filtered or unexported fields
}

This type is not goroutine safe and not recommended for the storage of large number of strings.

func NewEmptyOrderedStringSet

func NewEmptyOrderedStringSet() *OrderedStringSet

An empty OrderedStringSet

func NewOrderedStringSet

func NewOrderedStringSet(m []string) *OrderedStringSet

An OrderedStringSet with the supplied strings added to the new set in the provided order.

func (*OrderedStringSet) Add

func (os *OrderedStringSet) Add(s string)

See StringSet.Enqueue

func (*OrderedStringSet) AddAll

func (os *OrderedStringSet) AddAll(ss StringSet)

See StringSet.AddAll

func (*OrderedStringSet) Contains

func (os *OrderedStringSet) Contains(m string) bool

See StringSet.Contains

func (*OrderedStringSet) Contents

func (os *OrderedStringSet) Contents() []string

Contents returns the all of the strings in the set in the same order in which they were added.

func (*OrderedStringSet) Size

func (os *OrderedStringSet) Size() int

See StringSet.Size

type StringSet

type StringSet interface {
	// Whether or not the set contains the supplied string.
	Contains(m string) bool

	// Add the supplied string to the set. If the set already contains the supplied value, it is ignored.
	Add(s string)

	// The members of the set a string slice.
	Contents() []string

	// The number of members of the set.
	Size() int

	// Add all the members of the supplied set to this set.
	AddAll(os StringSet)
}

Common behaviour for an ordered or unordered set of strings.

type UnorderedStringSet

type UnorderedStringSet struct {
	// contains filtered or unexported fields
}

A set of strings where the order in which the strings were added to the set is not recorded.

This type is not goroutine safe and not recommended for the storage large number of strings.

func NewEmptyUnorderedStringSet

func NewEmptyUnorderedStringSet() *UnorderedStringSet

An empty UnorderedStringSet

func NewUnorderedStringSet

func NewUnorderedStringSet(m []string) *UnorderedStringSet

A new UnorderedStringSet seeded with the supplied strings.

func (*UnorderedStringSet) Add

func (ss *UnorderedStringSet) Add(s string)

See StringSet.Enqueue

func (*UnorderedStringSet) AddAll

func (us *UnorderedStringSet) AddAll(ss StringSet)

See StringSet.AddAll

func (*UnorderedStringSet) Contains

func (ss *UnorderedStringSet) Contains(m string) bool

See StringSet.Contains

func (*UnorderedStringSet) Contents

func (ss *UnorderedStringSet) Contents() []string

Contents returns all of the strings contained in this set in a nondeterministic order

func (*UnorderedStringSet) Size

func (ss *UnorderedStringSet) Size() int

See StringSet.Size

Package Files

Documentation was rendered with GOOS=linux and GOARCH=amd64.

Jump to identifier

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to identifier