OutWit.Engine.Data
Data models, base classes, and utilities for WitEngine controllers and activities.
Overview
This package provides the foundational data structures and base classes for building WitEngine controllers. It includes activity base classes, variable implementations, serialization support, and common utilities.
Installation
dotnet add package OutWit.Engine.Data
Key Components
Activity Base Classes
| Class |
Description |
WitActivity |
Abstract base for all activities |
WitActivityFunction |
Activity that returns a value to a variable |
WitActivityCommand |
Activity that performs an action without return |
WitActivityComposite |
Activity containing child activities |
WitActivityTransform |
Activity with transformer (arrow syntax support) |
Activity Adapter Base Classes
| Class |
Description |
WitActivityAdapterBase<T> |
Base adapter for simple activities |
WitActivityAdapterFunction<T> |
Adapter for function activities |
WitActivityAdapterComposite<T> |
Adapter for composite activities |
WitActivityAdapterTransform<T> |
Adapter for transform activities |
Variable Classes
| Class |
Description |
WitVariable<T> |
Generic typed variable |
WitVariableObject |
Object variable (any type) |
WitVariableTuple |
Key-value pair variable |
WitVariableCollection |
Base for collection variables |
Job Classes
| Class |
Description |
WitJob |
Main job implementation |
WitActivityCollection |
Collection of activities |
WitVariableCollection |
Collection of variables |
Parameter Types
| Class |
Description |
WitConstantString |
String literal |
WitConstantNumeric |
Numeric literal |
WitConstantBoolean |
Boolean literal |
WitConstantNull |
Null literal |
WitReference |
Variable reference |
WitCondition |
Conditional operator |
WitArray |
Array of parameters |
Status Classes
| Class |
Description |
WitProcessingStatus |
Job execution status |
WitActivityStatus |
Individual activity status |
WitProcessingResult |
Enum: Completed, Failed, Cancelled |
Processing Classes
| Class |
Description |
WitProcessingTask |
Running job task with events |
WitProcessingOptions |
Distributed processing configuration |
Attributes
| Attribute |
Description |
[Activity("Name")] |
Marks a class as an activity |
[Variable("Name")] |
Marks a class as a variable type |
[Job("Name")] |
Marks a class as a job type |
[RequiresCpu(...)] |
Specifies CPU requirements |
[RequiresGpu(...)] |
Specifies GPU requirements |
[RequiresOs(...)] |
Specifies OS requirements |
Usage Examples
Creating a Custom Activity
[Activity("MyActivity")]
[MemoryPackable]
public partial class MyActivity : WitActivityFunction
{
public IWitParameter? InputValue { get; init; }
public override bool Is(ModelBase modelBase, double tolerance = 1E-07)
{
if (modelBase is not MyActivity other)
return false;
return base.Is(other, tolerance)
&& InputValue.Check(other.InputValue);
}
protected override MyActivity InnerClone()
{
return new MyActivity { InputValue = InputValue?.Clone() as IWitParameter };
}
}
Creating an Activity Adapter
internal class MyActivityAdapter : WitActivityAdapterFunction<MyActivity>
{
public MyActivityAdapter(
IWitControllerManager controllerManager,
IWitProcessingManager processingManager,
ILogger logger)
: base(controllerManager, processingManager, logger)
{
}
protected override async Task<object?> ProcessInner(
MyActivity activity,
IWitVariablesCollection pool,
IWitActivityStatus? activityStatus,
WitProcessingStatus status)
{
if (!pool.TryGetValue(activity.InputValue, out int input))
throw new InvalidOperationException("Failed to get input");
return input * 2;
}
protected override MyActivity CreateActivity(IWitParameter[] parameters)
{
if (parameters.Length != 1)
throw new ArgumentException("Expected 1 parameter");
return new MyActivity { InputValue = parameters[0] };
}
}
Creating a Custom Variable
[Variable("MyType")]
[MemoryPackable]
public partial class MyVariable : WitVariable<MyData>
{
public MyVariable() : base() { }
public MyVariable(string name) : base(name) { }
public MyVariable(string name, MyData value) : base(name, value) { }
}
Registering in a Controller Module
public override void Initialize(IServiceCollection services)
{
services.AddVariable<MyVariable>();
services.AddActivityAdapter<MyActivity, MyActivityAdapter>();
}
Serialization
All data types use MemoryPack for high-performance binary serialization. Mark your classes with [MemoryPackable] and make them partial:
[MemoryPackable]
public partial class MyActivity : WitActivityFunction
{
// ...
}
Project Structure
OutWit.Engine.Data/
Activities/ - Activity base classes
ActivityAdapters/ - Adapter base classes
Variables/ - Variable implementations
Jobs/ - WitJob implementation
Constants/ - Literal value types
References/ - Variable reference types
Conditions/ - Conditional operators
Arrays/ - Array parameter type
Status/ - Processing status classes
Tasks/ - Processing task implementation
Processing/ - Processing options
Attributes/ - Activity/Variable attributes
Exceptions/ - Engine exceptions
Serialization/ - MemoryPack registration
Utils/ - Extension methods and utilities
Dependencies
- OutWit.Engine.Interfaces
- OutWit.Common.Aspects
- OutWit.Common.MemoryPack
License
This software is licensed under the Non-Commercial License (NCL).
- Free for personal, educational, and research purposes
- Commercial use requires a separate license agreement
- Contact licensing@ratner.io for commercial licensing inquiries
See the full LICENSE file for details.