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);
}
}
}