[DEPRECATED] Go implementation of plcbundle
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}