Skip to content

Class HookResultAttribute

Namespace: DotBoxD.Abstractions
Assembly: DotBoxD.Abstractions.dll

Marks a readonly partial record struct as a hook result: a value a .Register(…) / .RegisterLocal(…) terminal returns and the host applies. The DotBoxD generator emits builder members the user did not declare manually — Ok(), Reject(string? reason = null), and a With<Field>(value) per non-discriminator field — so result construction reads fluently and lowers to verified record.new IR.

A hook result must be a top-level readonly partial record struct that declares a bool Success field and a string? Reason field. Success = false means "abstain, fall through to the next matching registration"; a successful result may still carry a domain veto such as CanDie = false, so abstain and veto never overload the same field.

[AttributeUsage(AttributeTargets.Struct, Inherited = false)]
public sealed class HookResultAttribute : Attribute

objectAttributeHookResultAttribute

Attribute.Equals(object?), Attribute.GetCustomAttribute(Assembly, Type), Attribute.GetCustomAttribute(Assembly, Type, bool), Attribute.GetCustomAttribute(MemberInfo, Type), Attribute.GetCustomAttribute(MemberInfo, Type, bool), Attribute.GetCustomAttribute(Module, Type), Attribute.GetCustomAttribute(Module, Type, bool), Attribute.GetCustomAttribute(ParameterInfo, Type), Attribute.GetCustomAttribute(ParameterInfo, Type, bool), Attribute.GetCustomAttributes(Assembly), Attribute.GetCustomAttributes(Assembly, bool), Attribute.GetCustomAttributes(Assembly, Type), Attribute.GetCustomAttributes(Assembly, Type, bool), Attribute.GetCustomAttributes(MemberInfo), Attribute.GetCustomAttributes(MemberInfo, bool), Attribute.GetCustomAttributes(MemberInfo, Type), Attribute.GetCustomAttributes(MemberInfo, Type, bool), Attribute.GetCustomAttributes(Module), Attribute.GetCustomAttributes(Module, bool), Attribute.GetCustomAttributes(Module, Type), Attribute.GetCustomAttributes(Module, Type, bool), Attribute.GetCustomAttributes(ParameterInfo), Attribute.GetCustomAttributes(ParameterInfo, bool), Attribute.GetCustomAttributes(ParameterInfo, Type), Attribute.GetCustomAttributes(ParameterInfo, Type, bool), Attribute.GetHashCode(), Attribute.IsDefaultAttribute(), Attribute.IsDefined(Assembly, Type), Attribute.IsDefined(Assembly, Type, bool), Attribute.IsDefined(MemberInfo, Type), Attribute.IsDefined(MemberInfo, Type, bool), Attribute.IsDefined(Module, Type), Attribute.IsDefined(Module, Type, bool), Attribute.IsDefined(ParameterInfo, Type), Attribute.IsDefined(ParameterInfo, Type, bool), Attribute.Match(object?), Attribute.TypeId, object.Equals(object?), object.Equals(object?, object?), object.GetHashCode(), object.GetType(), object.ReferenceEquals(object?, object?), object.ToString()

[HookResult]
public readonly partial record struct CombatDamageResult(bool Success, string? Reason, int Damage);

// generated: CombatDamageResult.Ok().WithDamage(999), CombatDamageResult.Reject("not applicable")