public JDirectoryWriter(JsonTextWriter jsonTextWriter)
        {
            Writer = jsonTextWriter ?? throw new ArgumentNullException(nameof(jsonTextWriter));

            directoriesNodeState   = JsonNodeState.NotOpened;
            filesPropertyNodeState = JsonNodeState.NotOpened;
        }
        public void WriteStart(string directoryName)
        {
            WriteStartDirectoryInternal(directoryName);

            directoriesNodeState   = JsonNodeState.NotOpened;
            filesPropertyNodeState = JsonNodeState.NotOpened;
        }
        private void WriteEndFilesArray()
        {
            if (filesPropertyNodeState != JsonNodeState.Opened)
            {
                return;
            }

            Writer.WriteEndArray();
            filesPropertyNodeState = JsonNodeState.Closed;
        }
        private void WriteEndDirectoriesArray()
        {
            if (directoriesNodeState != JsonNodeState.Opened)
            {
                return;
            }

            Writer.WriteEndArray();
            directoriesNodeState = JsonNodeState.Closed;
        }
        private void WriteStartDirectoriesArray()
        {
            switch (directoriesNodeState)
            {
            case JsonNodeState.NotOpened:
                Writer.WritePropertyName("d");
                Writer.WriteStartArray();

                directoriesNodeState = JsonNodeState.Opened;
                break;

            case JsonNodeState.Closed:
                throw new Exception("Directories list is already closed. No more directories can be added.");

            case JsonNodeState.Opened:
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }