/// <summary>
        /// Write Key-Value Pair to specified node
        /// </summary>
        /// <param name="key">Key Name</param>
        /// <param name="value">Value, any datatypes</param>
        /// <param name="append">Should append to existing list or just overwrite?</param>
        /// <returns></returns>
        public GeneralCallback WriteKeyValuePair(string key, object value, bool append = false)
        {
            GeneralCallback callbackHandler = new GeneralCallback();

            string json = GenerateJson(value, key);

            RequestHelper req = new RequestHelper
            {
                Uri        = FirebaseConfig.endpoint + path + ".json" + GetAuthParam(),
                BodyString = json
            };

            if (append) //patch
            {
                RESTHelper.Patch(req, res => callbackHandler.successCallback?.Invoke(),
                                 err => callbackHandler.exceptionCallback?.Invoke(err));
                return(callbackHandler);
            }

            RESTHelper.PutJson(req, res => callbackHandler.successCallback?.Invoke(),
                               err => callbackHandler.exceptionCallback?.Invoke(err));

            return(callbackHandler);
        }
        /// <summary>
        /// Update value of specified path
        /// </summary>
        /// <param name="value">Updated value</param>
        /// <returns></returns>
        public GeneralCallback Update(object value)
        {
            GeneralCallback callbackHandler = new GeneralCallback();

            string json          = GenerateJson(value);
            string upperNodePath = GetImmediateUpperNode();

            RequestHelper req = new RequestHelper
            {
                Uri        = FirebaseConfig.endpoint + upperNodePath + ".json" + GetAuthParam(),
                BodyString = json
            };

            RESTHelper.Patch(req, res =>
            {
                callbackHandler.successCallback?.Invoke();
            },
                             err =>
            {
                callbackHandler.exceptionCallback?.Invoke(err);
            });

            return(callbackHandler);
        }