Interface for deferred attribute codecs in an editor datamodel. Declares DeferredDecodeAttribute which is called to load an attribute value from a stream offset; extends ICodec.
#nullable enable
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Numerics;
using System.Reflection;
using System.Runtime.CompilerServices;
namespace HumanoidRetargeter.EditorTools.Embedded.Datamodel.Codecs;
/// <summary>
/// Defines methods for the deferred loading of <see cref="Attribute"/> values.
/// </summary>
/// <remarks>
/// <para>Implementers must still load all elements and Attribute names. Only Attribute values can be streamed.</para>
/// <para>IDeferredAttributeCodec objects will be attached to their host Datamodel for the duration of its life.</para>
/// </remarks>
/// <seealso cref="CodecUtilities"/>
public interface IDeferredAttributeCodec : ICodec
{
/// <summary>
/// Called when an unloaded <see cref="Attribute"/> is accessed.
/// </summary>
/// <param name="dm">The <see cref="Datamodel"/> to which the Attribute belongs.</param>
/// <param name="offset">The offset at which the Attribute begins in the source <see cref="Stream"/>.</param>
/// <returns>The Attribute's value.</returns>
object? DeferredDecodeAttribute(Datamodel dm, long offset);
}