public async Task Write(ProfileTree tree, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();

            var errors = tree
                         .GetAllChildren()
                         .Select(tuple => tuple.tree)
                         .OfType <ProfileTreeError>()
                         .OrderBy(pair => pair.SourceMark)
                         .ToList();

            if (errors.Count > 0)
            {
                foreach (var error in errors)
                {
                    logger.Error(new
                    {
                        message  = "Error reading input",
                        error    = error.Error,
                        fileName = error.SourceMark.FileName,
                        line     = error.SourceMark.LineNumber
                    });
                }

                throw new ApplicationException();
            }

            using (var stream = outputStreamFactory())
                await DoWrite(tree, stream, cancellationToken);
        }
        public static IEnumerable <IProfileEntry> WithImplicitHiddenKeys(this SchemeNode node, ProfileTree tree)
        {
            var originalPayload    = node.GetOriginalPayload().ToList();
            var implicitHiddenKeys = (from pair in tree.GetAllChildren()
                                      where IsArray(pair.tree)
                                      select new Payload(
                                          new QualifiedName(pair.prefix.Parts.Append(new NamePart(new[] { new TextNameToken("type") }))),
                                          new[] { new TextValueToken("hiddenKey") }, pair.tree.GetFirstSourceMark())).ToList();

            return(originalPayload.Concat(implicitHiddenKeys));
        }