using System; using System.Collections.Generic; using System.IO; using System.Reflection; using JetBrains.Annotations; using NetSerializer; using Robust.Shared.RichText; namespace Robust.Shared.Serialization; /// /// Special network serializer for to make sure validation runs for network values. /// internal sealed class NetFormattedStringSerializer : IStaticTypeSerializer { public bool Handles(Type type) { return type == typeof(FormattedString); } public IEnumerable GetSubtypes(Type type) { return [typeof(string)]; } public MethodInfo GetStaticWriter(Type type) { return typeof(NetFormattedStringSerializer).GetMethod("Write", BindingFlags.Static | BindingFlags.NonPublic)!; } public MethodInfo GetStaticReader(Type type) { return typeof(NetFormattedStringSerializer).GetMethod("Read", BindingFlags.Static | BindingFlags.NonPublic)!; } [UsedImplicitly] private static void Write(Stream stream, FormattedString value) { Primitives.WritePrimitive(stream, value.Markup); } [UsedImplicitly] private static void Read(Stream stream, out FormattedString value) { Primitives.ReadPrimitive(stream, out string markup); // Must be valid formed strict markup, do not trust the client! value = FormattedString.FromMarkup(markup); } }