Skip to content
simulation-treePublic

About

Source generated type metadata available at runtime

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

123 Commits

Folders and files

Repository files navigation

Types

Test

Assists programming with value types in C#.

Initializing

Before types are interacted/accessed, the MetadataRegistry must be initialized by registering the types and interfaces in use:

Type layouts

These store metadata about what fields are found on a type:

namespace Example
{
	public struct Apple
	{
		public byte first;
		public ushort second;
		public Item item;
	}

	public struct Item
	{
		public uint id;
	}
}

TypeMetadata type = TypeMetadata.Get<Apple>();
Assert.That(type.FullName.ToString(), Is.EqualTo("Example.Apple"));
Assert.That(type.Size, Is.EqualTo(7));

ReadOnlySpan<Field> fields = type.Fields;
Assert.That(fields.Length, Is.EqualTo(3));
Assert.That(fields[0].Name.ToString(), Is.EqualTo("first"));
Assert.That(fields[1].Name.ToString(), Is.EqualTo("second"));
Assert.That(fields[2].Name.ToString(), Is.EqualTo("item"));
Assert.That(fields[2].type, Is.EqualTo(TypeMetadata.Get<Item>()));

Type banks

Type banks are generated for every project that references this library. They contain code that registers declared types:

MetadataRegistry.Load<CustomTypeBank>();

public readonly struct CustomTypeBank : ITypeBank
{
    void ITypeBank.Load(Register register)
    {
        register.Invoke<DateTime>();
    }
}

Type registry loaders

These are also generated like type banks. But differ in that they're only generated for projects with an entry point (a static void Main() method). They load all type banks found in the project:

MetadataRegistryLoader.Load();

About

Source generated type metadata available at runtime

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Packages

Used by

Contributors

Languages