#nullable enable using System; using System.Linq; using ShrinkCommand; using ShrinkEventBus; using ShrinkNetwork; using ShrinkNetwork.Integration; using ShrinkSDK.Runtime; var assembly = typeof(Program).Assembly; var marker = assembly.GetCustomAttributes(typeof(ShrinkCodeGenWovenAttribute), false) .Cast() .SingleOrDefault() ?? throw new InvalidOperationException("CodeGen marker is missing."); if (marker.WeaverVersion != "0.1.0" || !Guid.TryParse(marker.InputMvid, out _)) throw new InvalidOperationException("CodeGen marker is invalid."); if (!typeof(InstanceSubscriber).GetInterfaces().Contains(typeof(IShrinkGeneratedSubscriber))) throw new InvalidOperationException("Generated subscriber interface is missing."); using var binding = EventBus.Attach(new InstanceSubscriber()); EventBus.Post(new FixtureEvent()); if (InstanceSubscriber.Calls != 1 || StaticSubscriber.Calls != 1) throw new InvalidOperationException($"Generated EventBus bindings failed: instance={InstanceSubscriber.Calls}, static={StaticSubscriber.Calls}."); if (assembly.GetCustomAttributes(typeof(ShrinkCommandStaticRegistryAttribute), false).Length != 1) throw new InvalidOperationException("Command registry metadata is missing."); if (assembly.GetCustomAttributes(typeof(ShrinkNetworkMessageRegistryAttribute), false).Length != 1) throw new InvalidOperationException("Network message registry metadata is missing."); if (assembly.GetCustomAttributes(typeof(ShrinkNetworkStaticSubscriberRegistryAttribute), false).Length != 1) throw new InvalidOperationException("Network subscriber registry metadata is missing."); var bridgeRegistrations = (System.Collections.IEnumerable)(typeof(ShrinkNetworkEventRegistry) .GetMethod("Snapshot", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static)! .Invoke(null, null) ?? throw new InvalidOperationException("Network EventBus registry snapshot failed.")); if (!bridgeRegistrations.Cast().Any(item => item.GetType().GetProperty("EventType")?.GetValue(item) as Type == typeof(FixtureNetworkEvent))) throw new InvalidOperationException("Generated Network/EventBus binding is missing."); Console.WriteLine($"PASS CodeGen {marker.WeaverVersion}: EventBus + Command + Network + Network/EventBus registries"); public readonly struct FixtureEvent : IShrinkEvent { } [ShrinkEventSubscriber] public sealed class InstanceSubscriber { public static int Calls; [ShrinkSubscribe] private void OnEvent(FixtureEvent value) => Calls++; } [ShrinkEventSubscriber] public static class StaticSubscriber { public static int Calls; [ShrinkSubscribe] private static void OnEvent(FixtureEvent value) => Calls++; } [ShrinkCommandSubscriber] public static class FixtureCommands { [ShrinkCommand("fixture/ping")] public static void Ping() { } } [ShrinkNetworkMessage(41001, "fixture/ping")] public sealed class FixtureMessage : IShrinkNetworkMessage { } [ShrinkNetworkEvent] [ShrinkNetworkMessage(41002, "fixture/event")] public sealed class FixtureNetworkEvent : IShrinkEvent, IShrinkNetworkMessage { } [ShrinkNetworkSubscriber] public static class FixtureNetworkHandlers { [ShrinkNetworkSubscribe] public static void Handle(FixtureMessage message) { } }