Scripts/Runtime/Data/Entities/WitEntityData.cs (127 lines of code) (raw):

/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the license found in the * LICENSE file in the root directory of this source tree. */ using System; using Facebook.WitAi.Lib; using UnityEngine; namespace Facebook.WitAi.Data.Entities { public abstract class WitEntityDataBase<T> { public WitResponseNode responseNode; public string id; public string name; public string role; public int start; public int end; public string type; public string body; public T value; public float confidence; public bool hasData; public WitResponseArray entities; public WitEntityDataBase<T> FromEntityWitResponseNode(WitResponseNode node) { responseNode = node; id = node[WitEntity.Fields.ID]; name = node[WitEntity.Fields.NAME]; role = node[WitEntity.Fields.ROLE]; start = node[WitEntity.Fields.START].AsInt; end = node[WitEntity.Fields.END].AsInt; type = node[WitEntity.Fields.TYPE]; body = node[WitEntity.Fields.BODY]; confidence = node[WitEntity.Fields.CONFIDENCE].AsFloat; hasData = !string.IsNullOrEmpty(node.Value); value = OnParseValue(node); entities = node[WitEntity.Fields.ENTITIES].AsArray; return this; } protected abstract T OnParseValue(WitResponseNode node); public override string ToString() { return value.ToString(); } } public class WitEntityData : WitEntityDataBase<string> { public WitEntityData() {} public WitEntityData(WitResponseNode node) { FromEntityWitResponseNode(node); } protected override string OnParseValue(WitResponseNode node) { return node[WitEntity.Fields.VALUE]; } public static implicit operator bool(WitEntityData data) => null != data && !string.IsNullOrEmpty(data.value); public static implicit operator string(WitEntityData data) => data.value; public static bool operator ==(WitEntityData data, object value) => Equals(data?.value, value); public static bool operator !=(WitEntityData data, object value) => !Equals(data?.value, value); public override bool Equals(object obj) { if (obj is string s) return s == value; return base.Equals(obj); } public override int GetHashCode() { return base.GetHashCode(); } } public class WitEntityFloatData : WitEntityDataBase<float> { public WitEntityFloatData() {} public WitEntityFloatData(WitResponseNode node) { FromEntityWitResponseNode(node); } protected override float OnParseValue(WitResponseNode node) { return node[WitEntity.Fields.VALUE].AsFloat; } public static implicit operator bool(WitEntityFloatData data) => null != data && data.hasData; public bool Approximately(float v) => Mathf.Approximately(value, v); public static bool operator ==(WitEntityFloatData data, float value) => data?.value == value; public static bool operator !=(WitEntityFloatData data, float value) => !(data == value); public static bool operator ==(WitEntityFloatData data, int value) => data?.value == value; public static bool operator !=(WitEntityFloatData data, int value) => !(data == value); public static bool operator ==(float value, WitEntityFloatData data) => data?.value == value; public static bool operator !=(float value, WitEntityFloatData data) => !(data == value); public static bool operator ==(int value, WitEntityFloatData data) => data?.value == value; public static bool operator !=(int value, WitEntityFloatData data) => !(data == value); public override bool Equals(object obj) { if (obj is float f) return f == value; return base.Equals(obj); } public override int GetHashCode() { return base.GetHashCode(); } } public class WitEntityIntData : WitEntityDataBase<int> { public WitEntityIntData() {} public WitEntityIntData(WitResponseNode node) { FromEntityWitResponseNode(node); } protected override int OnParseValue(WitResponseNode node) { return node[WitEntity.Fields.VALUE].AsInt; } public static implicit operator bool(WitEntityIntData data) => null != data && data.hasData; public static bool operator ==(WitEntityIntData data, int value) => data?.value == value; public static bool operator !=(WitEntityIntData data, int value) => !(data == value); public static bool operator ==(int value, WitEntityIntData data) => data?.value == value; public static bool operator !=(int value, WitEntityIntData data) => !(data == value); public override bool Equals(object obj) { if (obj is int i) return i == value; return base.Equals(obj); } public override int GetHashCode() { return base.GetHashCode(); } } }