Skip to content

Source generated type metadata available at runtime

License

Notifications You must be signed in to change notification settings

simulation-tree/types

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

License

Stars

Watchers

Forks

Packages

 
 
 

Languages