using System; using System.Collections.Generic; using System.IO; using Vellum; namespace Clave.Vellum { /// /// Saves a Chord as its formula. /// public sealed class ChordConverter : SaveConverter { public override SaveNode Write(Chord value, SaveSession session) { return KeyFormulaConverter.ToTermsNode(value.Formula); } public override Chord Read(SaveNode node, SaveSession session) { var formula = KeyFormulaConverter.FromTermsNode(node); try { return Chord.FromFormula(formula); } catch (ArgumentException exception) { throw new InvalidDataException("A saved chord matches nothing a keyboard could produce.", exception); } } public override bool TryListChildren(SaveNode node, ChildList children) { // Everything it reads is built-in, and so left out. IReadOnlyList items; return node.TryGetItems(out items); } } }