/**
 * Copyright (c) 2008-2011, http://www.snakeyaml.org
 *
 * 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 org.yaml.snakeyaml;

public class LoaderOptions {
    /**
     * Store context with a Mark to have a better error message. Loader works
     * 40% slower and it consumes much more memory (default=false)
     */
    private boolean withMarkContext = false;
    private TypeDescription rootTypeDescription;

    public LoaderOptions() {
        this(new TypeDescription(Object.class));
    }

    public LoaderOptions(TypeDescription rootTypeDescription) {
        this.rootTypeDescription = rootTypeDescription;
    }

    public boolean isWithMarkContext() {
        return withMarkContext;
    }

    public void setWithMarkContext(boolean useContextMark) {
        this.withMarkContext = useContextMark;
    }

    public TypeDescription getRootTypeDescription() {
        return rootTypeDescription;
    }

    public void setRootTypeDescription(TypeDescription rootTypeDescription) {
        this.rootTypeDescription = rootTypeDescription;
    }
}
