func (s *Scoped) Soul(ctx context.Context) (string, error) {
	if cachedSoul := s.cachedSoul(); cachedSoul != "" {
		return cachedSoul, nil
	} else if r := s.FetchOne(ctx); r.Err != nil {
		return "", r.Err
	} else if !r.ValueExists {
		return "", nil
	} else if rel, ok := r.Value.(ValueRelation); !ok {
		return "", ErrNotObject
	} else if !s.setCachedSoul(rel) {
		return "", fmt.Errorf("Concurrent soul cache set")
	} else {
		return string(rel), nil
	}
}
// Soul returns the current soul of this value relation. It returns a cached
// value if called before. Otherwise, it does a FetchOne to get the value
// and return its soul if a relation. If any parent is not a relation or this
// value exists and is not a relation, ErrNotObject is returned. If this field
// doesn't exist yet, an empty string is returned with no error. Otherwise,
// the soul of the relation is returned. The context can be used to timeout the
// fetch.
Soul returns the current soul of this value relation. It returns a cached
value if called before. Otherwise, it does a FetchOne to get the value
and return its soul if a relation. If any parent is not a relation or this
value exists and is not a relation, ErrNotObject is returned. If this field
doesn't exist yet, an empty string is returned with no error. Otherwise,
the soul of the relation is returned. The context can be used to timeout the
fetch.
// Soul returns the current soul of this value relation . It returns a cached // value if called before . Otherwise it does a FetchOne to get the value // and return its soul if a relation . If any parent is not a relation or this // value exists and is not a relation ErrNotObject is returned . If this field // doesn ' t exist yet an empty string is returned with no error . Otherwise // the soul of the relation is returned . The context can be used to timeout the // fetch .
func (s *Scoped) Soul(ctx context.Context) (string, error) {
	if cachedSoul := s.cachedSoul(); cachedSoul != "" {
		return cachedSoul, nil
	} else if r := s.FetchOne(ctx); r.Err != nil {
		return "", r.Err
	} else if !r.ValueExists {
		return "", nil
	} else if rel, ok := r.Value.(ValueRelation); !ok {
		return "", ErrNotObject
	} else if !s.setCachedSoul(rel) {
		return "", fmt.Errorf("Concurrent soul cache set")
	} else {
		return string(rel), nil
	}
}
func ( s * Scoped ) Soul ( ctx context . Context ) ( string , error ) { if cachedSoul := s . cachedSoul ( ) ; cachedSoul != " " { return cachedSoul , nil } else if r := s . FetchOne ( ctx ) ; r . Err != nil { return " " , r . Err } else if ! r . ValueExists { return " " , nil } else if rel , ok := r . Value . ( ValueRelation ) ; ! ok { return " " , ErrNotObject } else if ! s . setCachedSoul ( rel ) { return " " , fmt . Errorf ( " " ) } else { return string ( rel ) , nil } }
Soul returns the current soul of this value relation.
Soul returns the current soul of this value relation .