[DEPRECATED] Go implementation of plcbundle
at main 1.4 kB view raw
1package plcbundle 2 3import ( 4 "context" 5 "io" 6 7 "tangled.org/atscan.net/plcbundle-go/bundle" 8) 9 10// Manager is the main entry point for plcbundle operations 11type Manager struct { 12 internal *bundle.Manager 13} 14 15// New creates a new plcbundle manager 16func New(opts ...Option) (*Manager, error) { 17 config := defaultConfig() 18 for _, opt := range opts { 19 opt(config) 20 } 21 22 mgr, err := bundle.NewManager(config.bundleConfig, config.plcClient) 23 if err != nil { 24 return nil, err 25 } 26 27 return &Manager{internal: mgr}, nil 28} 29 30// LoadBundle loads a bundle by number 31func (m *Manager) LoadBundle(ctx context.Context, bundleNumber int) (*Bundle, error) { 32 b, err := m.internal.LoadBundle(ctx, bundleNumber) 33 if err != nil { 34 return nil, err 35 } 36 return toBundlePublic(b), nil 37} 38 39// StreamBundleRaw streams raw compressed bundle data 40func (m *Manager) StreamBundleRaw(ctx context.Context, bundleNumber int) (io.ReadCloser, error) { 41 return m.internal.StreamBundleRaw(ctx, bundleNumber) 42} 43 44// Close closes the manager and releases resources 45func (m *Manager) Close() error { 46 m.internal.Close() 47 return nil 48} 49 50// FetchNextBundle fetches the next bundle from PLC directory 51func (m *Manager) FetchNextBundle(ctx context.Context) (*Bundle, error) { 52 b, _, err := m.internal.FetchNextBundle(ctx, false, false) 53 if err != nil { 54 return nil, err 55 } 56 return toBundlePublic(b), nil 57}