Tell a bundle the kinds its membership names
This commit is contained in:
@@ -31,6 +31,27 @@ type SeatTraffic struct {
|
|||||||
Answers []string `json:"answers,omitempty"`
|
Answers []string `json:"answers,omitempty"`
|
||||||
Workers []SeatWorker `json:"workers,omitempty"`
|
Workers []SeatWorker `json:"workers,omitempty"`
|
||||||
Records []string `json:"records,omitempty"`
|
Records []string `json:"records,omitempty"`
|
||||||
|
// Kinds are the holders of every kinded bench the module uses or watches, with what each promises: the
|
||||||
|
// controller's record of their claims (novox/hq ADR 0259 §5).
|
||||||
|
Kinds []KindHeld `json:"kinds,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// KindHeld is one kind of a kinded bench and who holds it.
|
||||||
|
type KindHeld struct {
|
||||||
|
Seat string `json:"seat"`
|
||||||
|
Kind string `json:"kind"`
|
||||||
|
Module string `json:"module"`
|
||||||
|
Node string `json:"node"`
|
||||||
|
Capabilities []string `json:"capabilities,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// SeatKinds is the kinds the module's membership names, as the controller issued them.
|
||||||
|
func (c *Conn) SeatKinds(module string) ([]KindHeld, error) {
|
||||||
|
t, err := c.trafficOf(module)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return append([]KindHeld{}, t.Kinds...), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// SeatWorker is one work queue a holder takes from.
|
// SeatWorker is one work queue a holder takes from.
|
||||||
|
|||||||
@@ -258,7 +258,7 @@ func Start(module, entry string, env []string, mesh Bus, logf func(string, ...an
|
|||||||
subscriber = c
|
subscriber = c
|
||||||
mu.Unlock()
|
mu.Unlock()
|
||||||
err = mesh.Subscribe(deliver)
|
err = mesh.Subscribe(deliver)
|
||||||
case "mesh/seat.publish", "mesh/seat.prove", "mesh/seat.record":
|
case "mesh/seat.publish", "mesh/seat.prove", "mesh/seat.record", "mesh/seat.kinds":
|
||||||
var answered json.RawMessage
|
var answered json.RawMessage
|
||||||
if answered, err = mesh.Seat(strings.TrimPrefix(m.Method, "mesh/seat."), m.Params, nil); err == nil {
|
if answered, err = mesh.Seat(strings.TrimPrefix(m.Method, "mesh/seat."), m.Params, nil); err == nil {
|
||||||
result = answered
|
result = answered
|
||||||
|
|||||||
@@ -717,6 +717,12 @@ func (b *moduleBus) Seat(verb string, params json.RawMessage, handOn func(string
|
|||||||
return json.Marshal(map[string]any{"sequence": seq})
|
return json.Marshal(map[string]any{"sequence": seq})
|
||||||
case "prove":
|
case "prove":
|
||||||
return conn.SeatProve(b.module, asked.Subject, asked.Body)
|
return conn.SeatProve(b.module, asked.Subject, asked.Body)
|
||||||
|
case "kinds":
|
||||||
|
kinds, err := conn.SeatKinds(b.module)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return json.Marshal(kinds)
|
||||||
case "record":
|
case "record":
|
||||||
entry, err := conn.SeatRecord(b.module, asked.Bucket, asked.Key)
|
entry, err := conn.SeatRecord(b.module, asked.Bucket, asked.Key)
|
||||||
if err != nil || entry == nil {
|
if err != nil || entry == nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user