All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.gson.FormattingStyle Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (C) 2022 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.google.gson;

import com.google.gson.stream.JsonWriter;
import java.util.Objects;

/**
 * A class used to control what the serialization output looks like.
 *
 * 

It currently has the following configuration methods, but more methods might be added in the * future: * *

    *
  • {@link #withNewline(String)} *
  • {@link #withIndent(String)} *
  • {@link #withSpaceAfterSeparators(boolean)} *
* * @see GsonBuilder#setFormattingStyle(FormattingStyle) * @see JsonWriter#setFormattingStyle(FormattingStyle) * @see Wikipedia Newline article * @since 2.11.0 */ public class FormattingStyle { private final String newline; private final String indent; private final boolean spaceAfterSeparators; /** * The default compact formatting style: * *
    *
  • no newline *
  • no indent *
  • no space after {@code ','} and {@code ':'} *
*/ public static final FormattingStyle COMPACT = new FormattingStyle("", "", false); /** * The default pretty printing formatting style: * *
    *
  • {@code "\n"} as newline *
  • two spaces as indent *
  • a space between {@code ':'} and the subsequent value *
*/ public static final FormattingStyle PRETTY = new FormattingStyle("\n", " ", true); private FormattingStyle(String newline, String indent, boolean spaceAfterSeparators) { Objects.requireNonNull(newline, "newline == null"); Objects.requireNonNull(indent, "indent == null"); if (!newline.matches("[\r\n]*")) { throw new IllegalArgumentException( "Only combinations of \\n and \\r are allowed in newline."); } if (!indent.matches("[ \t]*")) { throw new IllegalArgumentException( "Only combinations of spaces and tabs are allowed in indent."); } this.newline = newline; this.indent = indent; this.spaceAfterSeparators = spaceAfterSeparators; } /** * Creates a {@link FormattingStyle} with the specified newline setting. * *

It can be used to accommodate certain OS convention, for example hardcode {@code "\n"} for * Linux and macOS, {@code "\r\n"} for Windows, or call {@link java.lang.System#lineSeparator()} * to match the current OS. * *

Only combinations of {@code \n} and {@code \r} are allowed. * * @param newline the string value that will be used as newline. * @return a newly created {@link FormattingStyle} */ public FormattingStyle withNewline(String newline) { return new FormattingStyle(newline, this.indent, this.spaceAfterSeparators); } /** * Creates a {@link FormattingStyle} with the specified indent string. * *

Only combinations of spaces and tabs allowed in indent. * * @param indent the string value that will be used as indent. * @return a newly created {@link FormattingStyle} */ public FormattingStyle withIndent(String indent) { return new FormattingStyle(this.newline, indent, this.spaceAfterSeparators); } /** * Creates a {@link FormattingStyle} which either uses a space after the separators {@code ','} * and {@code ':'} in the JSON output, or not. * *

This setting has no effect on the {@linkplain #withNewline(String) configured newline}. If a * non-empty newline is configured, it will always be added after {@code ','} and no space is * added after the {@code ','} in that case. * * @param spaceAfterSeparators whether to output a space after {@code ','} and {@code ':'}. * @return a newly created {@link FormattingStyle} */ public FormattingStyle withSpaceAfterSeparators(boolean spaceAfterSeparators) { return new FormattingStyle(this.newline, this.indent, spaceAfterSeparators); } /** * Returns the string value that will be used as a newline. * * @return the newline value. */ public String getNewline() { return this.newline; } /** * Returns the string value that will be used as indent. * * @return the indent value. */ public String getIndent() { return this.indent; } /** Returns whether a space will be used after {@code ','} and {@code ':'}. */ public boolean usesSpaceAfterSeparators() { return this.spaceAfterSeparators; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy