private bool TryMakeBubblingEvent(ViewManagerExportedBubblingEventTypeConstantAttribute attribute, MemberInfo memberInfo, Type memberType, IJSValueWriter constantWriter, out Delegate memberValue) { if (null != attribute && null != memberInfo && TryGetEventDataType(memberType, out Type eventDataType)) { var eventName = attribute.EventName ?? "top" + memberInfo.Name; var bubbleName = attribute.BubbleCallbackName ?? "on" + memberInfo.Name; var captureName = attribute.CaptureCallbackName ?? bubbleName + "Capture"; constantWriter.WritePropertyName(eventName); constantWriter.WriteObjectBegin(); constantWriter.WritePropertyName("phasedRegistrationNames"); constantWriter.WriteObjectBegin(); constantWriter.WriteObjectProperty("bubbled", bubbleName); constantWriter.WriteObjectProperty("captured", captureName); constantWriter.WriteObjectEnd(); constantWriter.WriteObjectEnd(); memberValue = MakeEventDelegate(eventName, memberType, eventDataType); return(true); } memberValue = default(Delegate); return(false); }
// Writing discriminating union is simpler than reading. public static void WriteValue(this IJSValueWriter writer, OneOf2 <T2Extra, R2D2Extra> value) { writer.WriteObjectBegin(); if (value.TryGet(out T2Extra t2)) { writer.WriteObjectProperty("Kind", RobotModel.T2); writer.WriteObjectProperties(t2); } else if (value.TryGet(out R2D2Extra r2d2)) { writer.WriteObjectProperty("Kind", RobotModel.R2D2); writer.WriteObjectProperties(r2d2); } writer.WriteObjectEnd(); }
public static void WriteObjectProperties <T>(this IJSValueWriter writer, T value) { var treeWriter = new JSValueTreeWriter(); treeWriter.WriteValue(value); foreach (var property in treeWriter.TakeValue().AsObject()) { writer.WriteObjectProperty(property.Key, property.Value); } }
public static void WriteValue <T>(this IJSValueWriter writer, IEnumerable <KeyValuePair <string, T> > value) { if (value != null) { writer.WriteObjectBegin(); foreach (var pair in value) { writer.WriteObjectProperty(pair.Key, pair.Value); } writer.WriteObjectEnd(); } else { writer.WriteNull(); } }
// Writing RobotInfo value. It could be generated instead. public static void WriteValue(this IJSValueWriter writer, RobotInfo value) { if (value != null) { writer.WriteObjectBegin(); writer.WriteObjectProperty(nameof(value.Model), value.Model); writer.WriteObjectProperty(nameof(value.Name), value.Name); writer.WriteObjectProperty(nameof(value.Age), value.Age); writer.WriteObjectProperty(nameof(value.Shape), value.Shape); writer.WriteObjectProperty(nameof(value.Shape2), value.Shape2); writer.WriteObjectProperty(nameof(value.Shape3), value.Shape3); writer.WriteObjectProperty(nameof(value.Steps), value.Steps); writer.WriteObjectProperty(nameof(value.Dimensions), value.Dimensions); writer.WriteObjectProperty(nameof(value.Badges), value.Badges); writer.WriteObjectProperty(nameof(value.Tools), value.Tools); writer.WriteObjectProperty(nameof(value.Path), value.Path); writer.WriteObjectProperty(nameof(value.Extra), value.Extra); writer.WriteObjectEnd(); } else { writer.WriteNull(); } }