1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- package store
- import (
- "sort"
- "time"
- )
- // NodeExtern is the external representation of the
- // internal node with additional fields
- // PrevValue is the previous value of the node
- // TTL is time to live in second
- type NodeExtern struct {
- Key string `json:"key,omitempty"`
- Value *string `json:"value,omitempty"`
- Dir bool `json:"dir,omitempty"`
- Expiration *time.Time `json:"expiration,omitempty"`
- TTL int64 `json:"ttl,omitempty"`
- Nodes NodeExterns `json:"nodes,omitempty"`
- ModifiedIndex uint64 `json:"modifiedIndex,omitempty"`
- CreatedIndex uint64 `json:"createdIndex,omitempty"`
- }
- func (eNode *NodeExtern) loadInternalNode(n *node, recursive, sorted bool) {
- if n.IsDir() { // node is a directory
- eNode.Dir = true
- children, _ := n.List()
- eNode.Nodes = make(NodeExterns, len(children))
- // we do not use the index in the children slice directly
- // we need to skip the hidden one
- i := 0
- for _, child := range children {
- if child.IsHidden() { // get will not return hidden nodes
- continue
- }
- eNode.Nodes[i] = child.Repr(recursive, sorted)
- i++
- }
- // eliminate hidden nodes
- eNode.Nodes = eNode.Nodes[:i]
- if sorted {
- sort.Sort(eNode.Nodes)
- }
- } else { // node is a file
- value, _ := n.Read()
- eNode.Value = &value
- }
- eNode.Expiration, eNode.TTL = n.ExpirationAndTTL()
- }
- type NodeExterns []*NodeExtern
- // interfaces for sorting
- func (ns NodeExterns) Len() int {
- return len(ns)
- }
- func (ns NodeExterns) Less(i, j int) bool {
- return ns[i].Key < ns[j].Key
- }
- func (ns NodeExterns) Swap(i, j int) {
- ns[i], ns[j] = ns[j], ns[i]
- }
|