github.com/graemephi/kahugo@v0.62.3-0.20211121071557-d78c0423784d/config/compositeConfig.go (about)

     1  // Copyright 2021 The Hugo Authors. All rights reserved.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  // http://www.apache.org/licenses/LICENSE-2.0
     7  //
     8  // Unless required by applicable law or agreed to in writing, software
     9  // distributed under the License is distributed on an "AS IS" BASIS,
    10  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    11  // See the License for the specific language governing permissions and
    12  // limitations under the License.
    13  
    14  package config
    15  
    16  import (
    17  	"github.com/gohugoio/hugo/common/maps"
    18  )
    19  
    20  // NewCompositeConfig creates a new composite Provider with a read-only base
    21  // and a writeable layer.
    22  func NewCompositeConfig(base, layer Provider) Provider {
    23  	return &compositeConfig{
    24  		base:  base,
    25  		layer: layer,
    26  	}
    27  }
    28  
    29  // compositeConfig contains a read only config base with
    30  // a possibly writeable config layer on top.
    31  type compositeConfig struct {
    32  	base  Provider
    33  	layer Provider
    34  }
    35  
    36  func (c *compositeConfig) GetBool(key string) bool {
    37  	if c.layer.IsSet(key) {
    38  		return c.layer.GetBool(key)
    39  	}
    40  	return c.base.GetBool(key)
    41  }
    42  
    43  func (c *compositeConfig) GetInt(key string) int {
    44  	if c.layer.IsSet(key) {
    45  		return c.layer.GetInt(key)
    46  	}
    47  	return c.base.GetInt(key)
    48  }
    49  
    50  func (c *compositeConfig) Merge(key string, value interface{}) {
    51  	c.layer.Merge(key, value)
    52  }
    53  
    54  func (c *compositeConfig) GetParams(key string) maps.Params {
    55  	if c.layer.IsSet(key) {
    56  		return c.layer.GetParams(key)
    57  	}
    58  	return c.base.GetParams(key)
    59  }
    60  
    61  func (c *compositeConfig) GetStringMap(key string) map[string]interface{} {
    62  	if c.layer.IsSet(key) {
    63  		return c.layer.GetStringMap(key)
    64  	}
    65  	return c.base.GetStringMap(key)
    66  }
    67  
    68  func (c *compositeConfig) GetStringMapString(key string) map[string]string {
    69  	if c.layer.IsSet(key) {
    70  		return c.layer.GetStringMapString(key)
    71  	}
    72  	return c.base.GetStringMapString(key)
    73  }
    74  
    75  func (c *compositeConfig) GetStringSlice(key string) []string {
    76  	if c.layer.IsSet(key) {
    77  		return c.layer.GetStringSlice(key)
    78  	}
    79  	return c.base.GetStringSlice(key)
    80  }
    81  
    82  func (c *compositeConfig) Get(key string) interface{} {
    83  	if c.layer.IsSet(key) {
    84  		return c.layer.Get(key)
    85  	}
    86  	return c.base.Get(key)
    87  }
    88  
    89  func (c *compositeConfig) IsSet(key string) bool {
    90  	if c.layer.IsSet(key) {
    91  		return true
    92  	}
    93  	return c.base.IsSet(key)
    94  }
    95  
    96  func (c *compositeConfig) GetString(key string) string {
    97  	if c.layer.IsSet(key) {
    98  		return c.layer.GetString(key)
    99  	}
   100  	return c.base.GetString(key)
   101  }
   102  
   103  func (c *compositeConfig) Set(key string, value interface{}) {
   104  	c.layer.Set(key, value)
   105  }
   106  
   107  func (c *compositeConfig) SetDefaults(params maps.Params) {
   108  	c.layer.SetDefaults(params)
   109  }
   110  
   111  func (c *compositeConfig) WalkParams(walkFn func(params ...KeyParams) bool) {
   112  	panic("not supported")
   113  }
   114  
   115  func (c *compositeConfig) SetDefaultMergeStrategy() {
   116  	panic("not supported")
   117  }