Scripts/Runtime/Data/Entities/WitDynamicEntities.cs (89 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 System.Collections; using System.Collections.Generic; using Facebook.WitAi.Interfaces; using Facebook.WitAi.Lib; using UnityEngine; namespace Facebook.WitAi.Data.Entities { [Serializable] public class WitDynamicEntities : IDynamicEntitiesProvider, IEnumerable<WitDynamicEntity> { public List<WitDynamicEntity> entities = new List<WitDynamicEntity>(); public WitDynamicEntities() { } public WitDynamicEntities(IEnumerable<WitDynamicEntity> entity) { entities.AddRange(entity); } public WitDynamicEntities(params WitDynamicEntity[] entity) { entities.AddRange(entity); } public WitResponseClass AsJson { get { WitResponseClass json = new WitResponseClass(); foreach (var entity in entities) { json.Add(entity.entity, entity.AsJson); } return json; } } public override string ToString() { return AsJson.ToString(); } public IEnumerator<WitDynamicEntity> GetEnumerator() => entities.GetEnumerator(); IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } public WitDynamicEntities GetDynamicEntities() { return this; } public void Merge(IDynamicEntitiesProvider provider) { if (null == provider) return; entities.AddRange(provider.GetDynamicEntities()); } public void Merge(IEnumerable<WitDynamicEntity> mergeEntities) { if (null == mergeEntities) return; entities.AddRange(mergeEntities); } public void Add(WitDynamicEntity dynamicEntity) { int index = entities.FindIndex(e => e.entity == dynamicEntity.entity); if(index < 0) entities.Add(dynamicEntity); else Debug.LogWarning($"Cannot add entity, registry already has an entry for {dynamicEntity.entity}"); } public void Remove(WitDynamicEntity dynamicEntity) { entities.Remove(dynamicEntity); } public void AddKeyword(string entityName, WitEntityKeyword keyword) { var entity = entities.Find(e => entityName == e.entity); if (null == entity) { entity = new WitDynamicEntity(entityName); entities.Add(entity); } entity.keywords.Add(keyword); } public void RemoveKeyword(string entityName, WitEntityKeyword keyword) { int index = entities.FindIndex(e => e.entity == entityName); if (index >= 0) { entities[index].keywords.Remove(keyword); if(entities[index].keywords.Count == 0) entities.RemoveAt(index); } } } }