﻿/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*/

namespace PortCMIS
{
    /// <summary>
    /// PortCMIS client version.
    /// </summary>
    public static class ClientVersion
    {
        /// <summary>PortCMIS user agent name</summary>
        public const string UserAgentName = "Apache-Chemistry-PortCMIS";

        /// <summary>PortCMIS version</summary>
        public const string Version = "0.4";

        /// <summary>PortCMIS user agent name</summary>
        public const string UserAgent = UserAgentName + "/" + Version;
    }
}