/*
 * Copyright (C) 2018 The Android Open Source Project
 *
 * 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.android.layoutinspector.parser

import com.android.layoutinspector.model.ViewProperty

object ViewPropertyParser {
    fun parse(propertyFullName: String, value: String) : ViewProperty {
        val colonIndex = propertyFullName.indexOf(':')
        var category: String?
        var name: String?
        if (colonIndex != -1) {
            category = propertyFullName.substring(0, colonIndex)
            name = propertyFullName.substring(colonIndex + 1)
        } else {
            category = null
            name = propertyFullName
        }
        return ViewProperty(propertyFullName, name, category, value)
    }
}
