001/* 002 * SPDX-License-Identifier: Apache-2.0 003 * 004 * Copyright 2025-2026 The Enola <https://enola.dev> Authors 005 * 006 * Licensed under the Apache License, Version 2.0 (the "License"); 007 * you may not use this file except in compliance with the License. 008 * You may obtain a copy of the License at 009 * 010 * https://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018package dev.enola.cli; 019 020import io.ipfs.multibase.Multibase; 021import io.ipfs.multihash.Multihash; 022 023import picocli.CommandLine; 024 025@CommandLine.Command( 026 name = "multihash", 027 description = "Deconstructs a Multihash into its components") 028public class MultihashCommand implements Runnable { 029 030 @CommandLine.Spec CommandLine.Model.CommandSpec spec; 031 032 @CommandLine.Parameters(index = "0", paramLabel = "multihash", description = "Multihash") 033 String multihashString; 034 035 @Override 036 public void run() { 037 var multihash = Multihash.decode(multihashString); 038 var pw = spec.commandLine().getOut(); 039 pw.println(toString(multihashString, multihash)); 040 } 041 042 static String toString(String multihashString, Multihash multihash) { 043 var base = Multibase.encoding(multihashString); 044 return base.name() 045 + " - " 046 + multihash.getType() 047 + " - " 048 + multihash.getHash().length 049 + " bytes"; 050 } 051}