ObserveEndOfFile implemented
This commit is contained in:
@ -5,6 +5,8 @@ import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"net"
|
||||
|
||||
"git.milar.in/milarin/channel"
|
||||
)
|
||||
|
||||
type Command struct {
|
||||
@ -18,10 +20,11 @@ type Response[T any] struct {
|
||||
}
|
||||
|
||||
type Event[T any] struct {
|
||||
Data T `json:"data"`
|
||||
ID int `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Error string `json:"error"`
|
||||
Data T `json:"data"`
|
||||
ID int `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Error string `json:"error"`
|
||||
Reason string `json:"reason"`
|
||||
}
|
||||
|
||||
func SendCommand[T any](socket string, cmd *Command) (*Response[T], error) {
|
||||
@ -72,7 +75,16 @@ func SetProperty[T any](socket string, propertyName string, propertyValue T) err
|
||||
}
|
||||
|
||||
func ObserveProperty[T any](ctx context.Context, socket string, propertyName string) (<-chan T, error) {
|
||||
out := make(chan T, 10)
|
||||
ch, err := ObserveEvent[T](ctx, socket, propertyName)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return channel.MapSuccessive(ch, func(e Event[T]) T { return e.Data }), nil
|
||||
}
|
||||
|
||||
func ObserveEvent[T any](ctx context.Context, socket string, propertyName string) (<-chan Event[T], error) {
|
||||
out := make(chan Event[T], 10)
|
||||
|
||||
conn, err := net.Dial("unix", socket)
|
||||
if err != nil {
|
||||
@ -113,7 +125,7 @@ func ObserveProperty[T any](ctx context.Context, socket string, propertyName str
|
||||
if err := dec.Decode(&event); err != nil {
|
||||
break
|
||||
}
|
||||
out <- event.Data
|
||||
out <- event
|
||||
}
|
||||
}()
|
||||
|
||||
|
Reference in New Issue
Block a user