91 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package camfish
 | 
						|
 | 
						|
import "context"
 | 
						|
 | 
						|
// Actor is a participant in the environment. All public methods on an actor
 | 
						|
// must be safe for concurrent use by multiple goroutines. Additionally, any
 | 
						|
// type which explicitly implements Actor should:
 | 
						|
//   - Treat all public fields, values, indices, etc. as immutable
 | 
						|
//   - Satisfy Actor as a pointer, not a value
 | 
						|
//   - Not have a constructor
 | 
						|
type Actor interface {
 | 
						|
	// Type returns the type name of the actor. The value returned from this
 | 
						|
	// is used to locate actors capable of performing a specific task, so it
 | 
						|
	// absolutely must return the same string every time. Actors implemented
 | 
						|
	// in packages besides this one (i.e. not camfish) must not return the
 | 
						|
	// string "cron".
 | 
						|
	Type() string
 | 
						|
}
 | 
						|
 | 
						|
// FlagAdder is any object that can add [Flag]s to a [FlagSet]. Actors which
 | 
						|
// implement this interface will be called upon to add flags during and only
 | 
						|
// during the flag parsing phase.
 | 
						|
type FlagAdder interface {
 | 
						|
	// AddFlags adds flags to set. The object must not retain or distribute
 | 
						|
	// any reference to set.
 | 
						|
	AddFlags(set FlagSet)
 | 
						|
}
 | 
						|
 | 
						|
// ConfigProcessor is any object that can read and modify a configuration before
 | 
						|
// it is used. Actors which implement this interface will be called upon to
 | 
						|
// process the config during and only during the configuration processing phase.
 | 
						|
type ConfigProcessor interface {
 | 
						|
	// Process processes the config.
 | 
						|
	ProcessConfig(conf MutableConfig) error
 | 
						|
}
 | 
						|
 | 
						|
// Configurable is any object that must be configured before use or
 | 
						|
// initialization (if applicable). Actors which implement this interface will be
 | 
						|
// configured during the configuration phase, or when they are added.
 | 
						|
type Configurable interface {
 | 
						|
	// Configure configures the object. It must not make any attempt to
 | 
						|
	// modify conf, and it must not retain or distribute any reference to
 | 
						|
	// conf.
 | 
						|
	Configure(conf Config) error
 | 
						|
}
 | 
						|
 | 
						|
// Initializable is any object that must be initialized before use. Actors which
 | 
						|
// implement this interface will be initialized during the initialization phase,
 | 
						|
// or when they are added.
 | 
						|
type Initializable interface {
 | 
						|
	// Init initializes the object. It must return before the context
 | 
						|
	// expires, and must return ctx.Err if there is no other error to be
 | 
						|
	// returned. If Init returns an error, the object must be treated as
 | 
						|
	// invalid and any process which depends on it should be shut down.
 | 
						|
	Init(ctx context.Context) error
 | 
						|
}
 | 
						|
 | 
						|
// Runnable is any object with a central, long-running routine. Actors which
 | 
						|
// implement this interface will be run after they have been initialized,
 | 
						|
// configured, etc. (if applicable). The environment will attempt to restart
 | 
						|
// actors if their run method fails, see the documentation for this package's
 | 
						|
// [Run] function for details.
 | 
						|
type Runnable interface {
 | 
						|
	// Run runs the object. It must return when or before the context
 | 
						|
	// expires, and must return ctx.Err if there is no other error to be
 | 
						|
	// returned.
 | 
						|
	Run(ctx context.Context) error
 | 
						|
}
 | 
						|
 | 
						|
// Trimmable is any object that needs to have a task run every so often. This
 | 
						|
// can be garbage collecting, sanity checking, etc. Actors which implement this
 | 
						|
// interface will be routinely trimmed while running. See the documentation for
 | 
						|
// this package's [Run] function for details.
 | 
						|
type Trimmable interface {
 | 
						|
	// Trim trims the object. It must return when or before the context
 | 
						|
	// expires, and must return ctx.Err if there is no other error to be
 | 
						|
	// returned.
 | 
						|
	Trim(ctx context.Context) error
 | 
						|
}
 | 
						|
 | 
						|
// Resettable is any object that must be reset after failure and before re-use.
 | 
						|
// Actors which implement this interface will be reset after their Run method
 | 
						|
// (if applicable) has failed and is about to be called again.
 | 
						|
type Resettable interface {
 | 
						|
	// Reset resets the object. It must return when or before the context
 | 
						|
	// expires, and must return ctx.Err if there is no other error to be
 | 
						|
	// returned. If Reset returns an error, the object must be treated as
 | 
						|
	// invalid and any process which depends on it should be shut down.
 | 
						|
	Reset(ctx context.Context) error
 | 
						|
}
 |