content: package io.airlift.json;
  
  import java.io.IOException;
  import java.io.Writer;
  
  import static java.util.Objects.requireNonNull;
  
  class LengthLimitedWriter
          extends Writer
  {
      private final Writer writer;
      private final int maxLength;
      private int count;
  
      public LengthLimitedWriter(Writer writer, int maxLength)
      {
          this.writer = requireNonNull(writer, "writer is null");
          this.maxLength = maxLength;
      }
  
      @Override
      public void write(char[] buffer, int offset, int length)
              throws IOException
      {
          count += length;
          if (count > maxLength) {
              throw new LengthLimitExceededException();
          }
          writer.write(buffer, offset, length);
      }
  
      @Override
      public void flush()
              throws IOException
      {
          writer.flush();
      }
  
      @Override
      public void close()
              throws IOException
      {
          writer.close();
      }
  
      // this needs to extend IOException so that Jackson doesn't wrap it
      public static class LengthLimitExceededException
              extends IOException
      {
      }
  }
  