github.com/octohelm/wagon@v0.0.0-20240308040401-88662650dc0b/pkg/engine/plan/task/core/socket.go (about)

     1  package core
     2  
     3  import (
     4  	"context"
     5  	"encoding/json"
     6  	"sync"
     7  
     8  	"github.com/opencontainers/go-digest"
     9  
    10  	"dagger.io/dagger"
    11  )
    12  
    13  func init() {
    14  	DefaultFactory.Register(&Socket{})
    15  }
    16  
    17  type Socket struct {
    18  	Meta struct {
    19  		Socket struct {
    20  			ID string `json:"id,omitempty"`
    21  		} `json:"socket"`
    22  	} `json:"$wagon"`
    23  }
    24  
    25  var socketIDs = sync.Map{}
    26  
    27  func (s Socket) SocketID() dagger.SocketID {
    28  	if id, ok := fsids.Load(s.Meta.Socket.ID); ok {
    29  		return id.(dagger.SocketID)
    30  	}
    31  	return ""
    32  }
    33  
    34  func (s *Socket) SetSocketID(id dagger.SocketID) {
    35  	key := digest.FromString(string(id)).String()
    36  	fsids.Store(key, id)
    37  	s.Meta.Socket.ID = key
    38  }
    39  
    40  func (v *Socket) SetSocketIDBy(ctx context.Context, socket *dagger.Socket) error {
    41  	id, err := socket.ID(ctx)
    42  	if err != nil {
    43  		return err
    44  	}
    45  	v.SetSocketID(id)
    46  	return nil
    47  }
    48  
    49  type SocketOrString struct {
    50  	Value  string
    51  	Socket *Socket
    52  }
    53  
    54  func (SocketOrString) OneOf() []any {
    55  	return []any{
    56  		"",
    57  		&Socket{},
    58  	}
    59  }
    60  
    61  func (s *SocketOrString) UnmarshalJSON(data []byte) error {
    62  	if len(data) > 0 && data[0] == '{' {
    63  		se := &Socket{}
    64  		if err := json.Unmarshal(data, se); err != nil {
    65  			return err
    66  		}
    67  		s.Socket = se
    68  		return nil
    69  	}
    70  	return json.Unmarshal(data, &s.Value)
    71  }
    72  
    73  func (s SocketOrString) MarshalJSON() ([]byte, error) {
    74  	if s.Socket != nil {
    75  		return json.Marshal(s.Socket)
    76  	}
    77  	return json.Marshal(s.Value)
    78  }